Fragment里onActivityResult()无回调的问题
来源:互联网 发布:linux 视频点播服务器 编辑:程序博客网 时间:2024/05/21 17:26
最近工作,接手了项目,测试发现有一个bug,就是在Fragment中使用startActivityForResult(Intent intent,int requestcode) 方法调用其他activity,重写onActivityforResult方法,但是onActivityforResult并没有被调用。
这个问题的解决思路就是两个方面。
先从onActivityforResult入手,在方法第一句打印log,发现没有被执行,说明问题发生在这之前。
再从startActivityForResult入手,调用的Activity正确被调用,并且一直执行到setResult方法,查看responseCode也没有问题,说明不是被调用的Activity的问题。
那么问题就应该发生在startActivityForResult上了。
getActivity().startActivityForResult(new Intent(getActivity(), CaptureActivity.class), REQUESTCODE_SCAN);这是原来错误的写法,查看源码,fragment的getActivity方法返回了一个FragmentActivity的对象;
此时调用的是FragmentActivity的startActivityForResult方法。
问题就发生在这里。
正确的写法是直接在Fragment中使用Fragment的startActivityForResult方法。
startActivityForResult(new Intent(getActivity(), CaptureActivity.class), REQUESTCODE_SCAN);
修改后正常调用了onActivityforResult。
查看Fragment.startActivityForResult()方法,源码如下:
public void startActivityForResult(Intent intent, int requestCode) { if (mActivity == null) { throw new IllegalStateException("Fragment " + this + " not attached to Activity"); } mActivity.startActivityFromFragment(this, intent, requestCode); }
也就是说在fragment中的调用顺序是:
1.Fragment.startActivityForResult()
2.FragmentActivity.startActivityFormFragment()
3.Activity.startActivityForResult()
而如果使用了getActivity()的调用顺序是:
1.FragmentAcitvity.startActivityForResult()
2.Activity.startActivityForResult()
这就是二者的区别,导致了onActivityResult()不能调用。
- Fragment里onActivityResult()无回调的问题
- 关于Fragment下面onActivityResult()无回调的问题
- Fragment onActivityResult 无效的问题
- 关于fragment里使用onActivityResult,与onresume等问题
- 关于android Fragment onActivityResult 的问题
- 【android】fragment不响应onActivityResult的问题
- Fragment中onActivityResult不调用的问题
- Android fragment onActivityResult 问题
- Android fragment onActivityResult 问题
- Android fragment onActivityResult 问题
- Fragment onActivityResult问题
- Fragment onActivityResult方法问题
- fragment嵌套2个fragment的时候onactivityresult分发问题
- fragment 的onActivityResult
- Fragment 无法响应OnActivityResult 问题
- Android中Fragment的onActivityResult不被调用的问题
- Activity和Fragment的OnActivityResult的回调问题
- 关于在Fragment下onActivityResult回调无结果的问题
- 迷雾平时都有呢
- Tomcat配置域名和虚拟目录
- mysql利用st_distance函数查询附近的点的功能
- 2015062709 - 收获与不足
- 找数字的小测试
- Fragment里onActivityResult()无回调的问题
- [Erlang]link进程信号详解
- 真正理解红黑树,真正的(Linux内核里大量用到的数据结构,且常被二货问到)
- 2.29
- Java IO流 Properties练习-记录应用程序运行次数
- 深入学习表达式
- 编译原理项目--比特大战
- leetcode 日经贴,Cpp code -Summary Ranges
- Redis 对象