我试着搜索,但我还是有点迷茫。我通常Activity
通过接口或BroadcastReceiver
.
无论如何,我的问题是有什么用getTargetFragment
?有人可以提供一个用例或只是一个简单的例子,以便我理解它的用法吗?
我试着搜索,但我还是有点迷茫。我通常Activity
通过接口或BroadcastReceiver
.
无论如何,我的问题是有什么用getTargetFragment
?有人可以提供一个用例或只是一个简单的例子,以便我理解它的用法吗?
用例 = 由同一活动托管的 2 个片段。
wherestartActivityForResult()
建立了 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)
我终于找到了如何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 很有用,除非你已经完成了“添加”片段事务而不是替换(这会破坏视图但保持状态)。
从阅读文档中我能了解到的是,这些方法是从另一个 Fragment 访问数据的另一种方式。这是我编写的一个示例项目,它演示了使用这些方法的单个用例。我敢肯定还有更多的用例......