我试着搜索,但我仍然有点失落。我通常会通过Activity
via接口或BroadcastReceiver
对片段进行片段分片。
无论如何,我的问题是getTargetFragment
的用途是什么?有人可以提供一个用例或只是一个简单的例子,以便我能理解它的用法吗?
答案 0 :(得分:42)
使用案例=由同一活动托管的2个片段。
startActivityForResult()
建立2个活动之间的关系时,setTargetFragment()
定义2个片段之间的调用/被调用关系。
setTargetFragment(target)让"调用"片段知道在哪里发送结果。在这种情况下,onActivityResult()
会被手动调用。
public class Caller extends Fragment
Fragment called = Called.newInstance()
called.setTargetFragment(this)
public class Called extends DialogFragment
intent = amazingData
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent)
答案 1 :(得分:10)
我终于找到了如何在片段中使用setTarget并想分享。当你想要从片段到片段进行通信时,它非常有用。
这是一个例子:假设你想要显示一个对话框,当它关闭时你想要做一些动作。
所以在你将使用对话框的fragment1中你可以这样做:
myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE);
在调用对话框的片段中,您需要覆盖onActivityResult,如下所示:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CoDDialogFragment.REQ_CODE)
exit(); //or whatever you want to do here
}
在myDialogFragment中你可以这样做:
TellTargetYouGotResults(REQ_CODE);
//...
private void TellTargetYouGotResults(int code) {
Fragment targetFragment = getTargetFragment(); // fragment1 in our case
if (targetFragment != null) {
targetFragment.onActivityResult(getTargetRequestCode(), code, null);
}
}
其中REQ_CODE当然可以是任何int。对于片段到片段的通信非常有用。但我仍然更喜欢事件总线,因为有时在向目标发送数据后,它的视图可能已经被破坏(包含它的片段),然后如果你尝试更新onActivityResult中的视图,你将会崩溃。所以我说它只是传递数据但不更新UI很有用,除非你做了'添加'片段事务而不是替换(它破坏视图但保持状态)。
答案 2 :(得分:4)
从我能够从阅读文档中获取的是,这些方法是从另一个片段访问数据的另一种方式。这是我写的sample project,演示了使用这些方法的单个用例。我确定有更多的用例,但是......