很简单,但我不知道解决这个问题的正确方法。
我有片段A,这是一个项目列表。片段B是单个所选项目的详细视图。在片段B中,我有一个删除操作按钮,显然应该删除当前项目。但是如何从不同的片段中删除该列表项呢?我应该在按下删除按钮时使用监听器,然后从活动中删除该项目吗?
解决这个问题的最佳方法是什么?
答案 0 :(得分:3)
通常,这样做的方法是通过活动,因为片段最好不要彼此了解。
这样做的方法是定义一个如下界面:
interface FragmentBListener {
void onDelete();
}
使用FragmentB注册侦听器:
class FragmentB extends Fragment ... {
private FragmentBListener _listener;
public void setListener(FragmentBListener listener) { _listener = listener ;}
// And in your Delete button handler:
private void onDeleteButton() {
_listener.onDelete();
}
}
现在在您的活动中实现界面:
class MyActivity implements FragmentBListener {
// Instantiate the fragments:
private void initFragments() {
...
_fragmentB.setListener(this);
}
public void onDelete() {
_fragmentA.delete(...);
}
}
它有点冗长,但它使片段彼此独立,这可能很重要。
答案 1 :(得分:0)
其他答案很好,但只是添加另一个选择,启动API 17,您可以使用getChildFragmentManager()
使片段B成为片段A的子代。这将允许您在片段B中使用getParentFragment()
。如果一个片段在逻辑上应该是另一个片段的孩子,这将是最佳选择。
但这会使该应用与Android版本不兼容< 4.2,所以这是一个权衡。
答案 2 :(得分:0)
最近,我正在研究Android EventBus开源库。请检查一下。它是解决每个组件之间通信的非常有用的工具,包括活动,片段,服务,广播等。
我相信这种工具可以在Android中发挥重要作用,其中包括不同的组件/模块。