我有一个Activity
和六个不同的Fragments
。每个片段都有OnFragmentInteractionListener
接口,并且activity实现所有这些侦听器以接收回调。它看起来有点乱,所以我感兴趣的是有一些模式/方法来简化这个并使它更优雅吗?
答案 0 :(得分:22)
一个好的解决方案是对所有片段使用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
}
...
}
您可以使用对象类型传递您想要的每种类型的数据(然后,在每个if,您必须将Object转换为必要的类型)。
使用这种方式,维护比6个不同的侦听器和每个要传递的数据类型的方法更容易。
希望这有帮助。
答案 1 :(得分:8)
我尝试改进neonamu's answer:
您可以定义上面指定的界面,但可以定义通用的
public interface OnListFragmentInteractionListener<T> {
void onListFragmentInteraction(String tag, T data);
}
然后在主机活动中,您可以专门为您想要的类型实现它,或者像上面建议的对象:
public class MyFragActivity implements OnListFragmentInteractionListener<Object> {
...
@Override
public void onListFragmentInteraction(String tag, Object data) {
//do some stuff with the data
}
}
这样,当您根据应用程序的需要实现接口时,也许您可以在其他情况下重用此接口。