您的位置:首页 > 其它

嵌套Fragment情况下对二级Fragment onActivityResult()收不到Activity数据的解决方案

2015-05-25 17:36 676 查看

现象:

在做开发的时候遇到这么一个问题:在多级Fragment共同存在使用的过程当中,如果在二级Fragment跳转到一个新的Activity,并且需要Activity传返回数据的时候,一般会在该Fragment使用startActivityForResult()方法。这个时候发现,当跳转的目标Activity有回传数据的时候,该二级Fragment的onActivityResult()方法是拿不到传回的值的。具体的现象见下图。Fragment
3的onActivityResult()方法是拿不到Activity的回传值的。



原因:

Android 本身的bug,详情可见:http://www.tuicool.com/articles/2eM32a

解决方案:

当在Fragment 3进行跳转时用getParentFragment().startActivityForResult()方法,这样回传值会传到MainFragment()的onActivityResult()方法当中。同时在Fragment 3中声明对传回数据的set()和get()方法,在MainFragment中调用实例化后的Fragment3.set()方法,同时在Fragment
3中用get()方法去取回数据。如果涉及到页面刷新的动作的话,可以在Fragment 3中的onResume()方法去判断是否等于回传的数据,是的话进行刷新。

主要代码:

</pre><span style="font-size:18px;font-weight: normal;">Fragment 3</span><pre name="code" class="java"><span style="font-size:18px;font-weight: normal;">                Intent intent = new Intent(mContext, mActivity.class);
intent.putExtra("current_index", position);
<span style="color:#ff6666;">getParentFragment()</span>.startActivityForResult(intent, 1);</span>

Activity


<span style="font-size:18px;">	Intent intent = new Intent();
intent.putExtra("data", 2);
setResult(resultCode1, intent);
<span style="color:#ff6666;">finish();</span></span>


MainFragment
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == resultCode1) {
Log.e("MainFragment", "MainFragment onActivityResult is called:"
+ data.getExtras().getInt("data"));
Fragment 3.setRefreshFlag(data.getExtras()
.getInt("data"));
}
super.onActivityResult(requestCode, resultCode, data);
}


Fragment 3
public void onResume() {
Log.e("on Resume", "onResume is called");
if (getRefreshFlag() != 0
&& getRefreshFlag() == 2) {
mAdapter.notifyDataSetChanged();

}
super.onResume();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: