如何从Fragment B中删除片段A中的列表项?

时间:2014-08-22 19:11:49

标签: java android android-fragments

很简单,但我不知道解决这个问题的正确方法。

我有片段A,这是一个项目列表。片段B是单个所选项目的详细视图。在片段B中,我有一个删除操作按钮,显然应该删除当前项目。但是如何从不同的片段中删除该列表项呢?我应该在按下删除按钮时使用监听器,然后从活动中删除该项目吗?

解决这个问题的最佳方法是什么?

3 个答案:

答案 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中发挥重要作用,其中包括不同的组件/模块。