片段之间的通信

3

我有一个默认的主从流程,这是在创建新项目时自动生成的。我的问题是:当我在详细信息侧面添加一个按钮时,是否有一种方式可以通过按下该按钮更新列表侧边栏?换句话说,ItemDetailFragment和ItemListFragment能够相互通信吗?


只需查看此链接:https://dev59.com/F2_Xa4cB1Zd3GeqP4bx_#37701651 - Bikesh M
1个回答

6

是的,只需通过与监听器进行交互即可。

您的活动:

public class MyActivity extends FragmentActivity implements OnFragmentClickListener {
    @Override
    public void OnFragmentClick(int action, Object object) {
        switch(action) {
        }
    }
}

监听器类:
    public interface OnFragmentClickListener {
        public void OnFragmentClick(int action, Object object);
    }

您需要在代码中添加以下内容来实现接口:

然后您的片段将具有以下内容:

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentClickListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement listeners!");
        }
    }

然后你的片段之间会像这样相互通信:fragmentA -> activity -> fragmentB。你的活动可以直接在片段上调用方法,而无需担心同步问题。

来自片段A的调用示例:

mListener.OnFragmentClick(GLOBAL_ACTION_KEY someObject);

活动(Activity)的处理:

public class MyActivity extends FragmentActivity implements OnFragmentClickListener {
    @Override
    public void OnFragmentClick(int action, Object object) {
        switch(action) {
            case GLOBAL_ACTION_KEY:
                // you call fragmentB.someMethod();
                break;
        }
    }
}

你的片段属于哪一个?如果片段分别位于各自的活动中,您可能需要考虑通过静态类或类似物进行通信。您能描述一下您的层次结构吗? - Warpzit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接