如何让 DialogFragment 调用另一个 Fragment 中的方法
How to make DialogFragment call a method inside another Fragment
我有一个选项卡 activity,它像往常一样显示 viewpager 的片段。
此片段有一个列表。
用户的一个操作显示了一个对话框片段,让用户在此列表中插入一个新项目。
我显示带有编辑文本的对话框片段以供用户创建新项目。
问题是:如何将此项目插入 viewpager 的片段列表?
我可以从任何片段调用 getActivity() 来访问 activity,但是如何访问显示在对话框片段后面的另一个片段?
提前致谢。
听起来您想从对话片段中获得结果(用户在对话片段编辑文本中插入的内容)并在调用 dialogfragment 的片段中使用它(作为新项目添加到列表中)——在这种情况下,selected answer here solves this problem - also I think this Gist 是一个很好的参考资源。
在你的情况下,我也认为像他们在这个要点中所做的那样实现某种自定义 listener/callback 是一个好主意。希望这有帮助。
包含列表项的片段 - FragmentA
对话框 - NewItemDialogFragment
您缺少的方法是 setTargetFragment()。在构建 NewItemDialogFragment
时,调用此方法将 FragmentA
作为对话的目标片段传递。
稍后,您可以通过在 NewItemDialogFragment
中调用 getTargetFragment() 来访问 FragmentA
实例并将其转换为 FragmentA
并添加新创建的项目。
或者,您可以在 FragmentA
和 NewItemDialogFragment
之间创建合约接口
您可以为此使用事件总线。
这是一个用法示例:
Bus bus = new Bus();
bus.post(new AnswerAvailableEvent(42));
@Subscribe public void answerAvailable(AnswerAvailableEvent event) {
// TODO: React to the event somehow!
}
bus.register(this); // In order to receive events, a class instance needs to register with the bus.
我有一个选项卡 activity,它像往常一样显示 viewpager 的片段。 此片段有一个列表。
用户的一个操作显示了一个对话框片段,让用户在此列表中插入一个新项目。
我显示带有编辑文本的对话框片段以供用户创建新项目。
问题是:如何将此项目插入 viewpager 的片段列表?
我可以从任何片段调用 getActivity() 来访问 activity,但是如何访问显示在对话框片段后面的另一个片段?
提前致谢。
听起来您想从对话片段中获得结果(用户在对话片段编辑文本中插入的内容)并在调用 dialogfragment 的片段中使用它(作为新项目添加到列表中)——在这种情况下,selected answer here solves this problem - also I think this Gist 是一个很好的参考资源。 在你的情况下,我也认为像他们在这个要点中所做的那样实现某种自定义 listener/callback 是一个好主意。希望这有帮助。
包含列表项的片段 - FragmentA
对话框 - NewItemDialogFragment
您缺少的方法是 setTargetFragment()。在构建 NewItemDialogFragment
时,调用此方法将 FragmentA
作为对话的目标片段传递。
稍后,您可以通过在 NewItemDialogFragment
中调用 getTargetFragment() 来访问 FragmentA
实例并将其转换为 FragmentA
并添加新创建的项目。
或者,您可以在 FragmentA
和 NewItemDialogFragment
您可以为此使用事件总线。
这是一个用法示例:
Bus bus = new Bus();
bus.post(new AnswerAvailableEvent(42));
@Subscribe public void answerAvailable(AnswerAvailableEvent event) {
// TODO: React to the event somehow!
}
bus.register(this); // In order to receive events, a class instance needs to register with the bus.