如何在一个活动中正确处理多个片段交互监听?

我有一个和六个不同的附加在它上面。每个片段都有接动实现所有这些侦听器以接收回调。它看起来有点乱,所以我感兴趣的是有一些模式/方法来简化这一点,使它更优雅?ActivityFragmentsOnFragmentInteractionListener


答案 1

一个好的解决方案是对所有片段使用 SAME OnFragmentInteractionListener,并使用每个侦听器方法的一个参数(如 TAG 参数)来识别发送操作的片段。

下面是一个示例:

创建一个新类,每个片段都使用这个类

OnFragmentInteractionListener.java

public interface OnFragmentInteractionListener {
    public void onFragmentMessage(String TAG, Object data);
}

在您的活动中:

public void onFragmentMessage(String TAG, Object data){
    if (TAG.equals("TAGFragment1")){
        //Do something with 'data' that comes from fragment1
    }
    else if (TAG.equals("TAGFragment2")){
        //Do something with 'data' that comes from fragment2
    }
    ... 
} 

可以使用 Object 类型传递所需的每种类型的数据(然后,在每个 if 中,必须将 Object 转换为必要的类型)。

使用这种方式,维护比拥有6个不同的侦听器和一个要传递的每种数据类型的方法更容易。

希望这有帮助。


答案 2

我试图改进neonamu的答案

您可以定义上面指定的接口,但可以定义一个通用接口

public interface OnListFragmentInteractionListener<T> {

      void onListFragmentInteraction(String tag, T data);
}

然后,在宿主活动中,您可以专门针对所需的类型实现它,或者像上面为Object建议的那样:

public class MyFragActivity implements OnListFragmentInteractionListener<Object> {
    ...

    @Override
    public void onListFragmentInteraction(String tag, Object data) {
          //do some stuff with the data
    }
}

这样,当您根据应用程序的需要实现接口时,也许您可以在另一种情况下重用此接口。


推荐