本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
Fragment中调用startActivityForResult要注意几种情况
- 用getActivity方法发起调用,只有父Activity的onActivityResult会调用,Fragment中的onActivityResult不会被调用
- 直接发起startActivityForResult调用,当前的Fragment的onActivityResult,和父Activity的onActivityResult都会调用
- 用getParentFragment发起调用,则只有父Activity和父Fragment的onActivityResult会被调用,当前的Fragment的onActivityResult不会被调用。
这里2和3的前提是如果父activity中重写了
onActivityResult,父Activity的onActivityResult中必须添加super.onActivityResult()
总结起来就是:从哪里发起调用,最终就会走到哪里。
源码分析
Fragment中直接调用startActivityForResult
(1)发起startActivityForResult调用
这种情况会直接调用到Fragment的startActivityForResult方法
//Fragment.class
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
if (mHost == null) {
throw new IllegalStateException("Fragment " + this + " not attached to Activity");
}
mHost.onStartActivityFromFragment(this /*fragment*/, intent, requestCode, options);
}
上面的mHost对应的就是Fragment的父FragmentActivity,所以会调用到父FragmentActivity的startActivityFromFragment方法
//FragmentActivity.class
public void startActivityFromFragment(Fragment fragment, In

本文分析了Fragment中调用startActivityForResult的三种情况:直接调用、通过getParentFragment发起和通过getActivity方法发起。重点讨论了回调路径及源码细节,强调了正确处理onActivityResult回调的重要性,提供了不同场景下的应用步骤和避免陷阱的建议。
最低0.47元/天 解锁文章
415

被折叠的 条评论
为什么被折叠?



