对于片段 - 活动通信,this是建议的方法,通过使用监听器。
在我的情况下,我有两个片段和一个按钮,我希望他们在按下时做同样的事情。
我应该创建一个Activity实现的单独的侦听器类,然后在每个片段中实例化一个侦听器,还是有一个我不知道的更好的设计?
修改
对不起,我可能没有正确地沟通。我不是在寻找片段之间的沟通。我有一个带有buttonA的片段A和带有buttonB的片段B.当我点击buttonA时,我的Activity中有一个监听器,并调用方法doSomething()
。现在我想要buttonB调用doSomething()
。我应该A)创建第二个监听器并让活动实现它,B)创建一个单独的监听器类并将其用于两者或C)更好的选择??
答案 0 :(得分:0)
答案 1 :(得分:0)
从文档中可以看出:
两个碎片不应该直接通信。
因此,您最好遵循文章中解释的模式,并通过片段附加的活动进行沟通。 当从片段A调用侦听器时,从fragmentManger
获取片段B. YourFragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_b);
fragment.doSomething();
答案 2 :(得分:0)
我正在使用这种模式,它对我很有用:
public class Fragment1 extends Fragment {
FragmentListener mCallback;
public interface FragmentListener {
public void onAction1();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof FragmentListener) {
mCallback = (FragmentListener) activity;
}
}
public void onAction2() {
// do your stuff...
}
}
public class Fragment2 extends Fragment {
FragmentListener mCallback;
public interface FragmentListener {
public void onAction2();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof FragmentListener) {
mCallback = (FragmentListener) activity;
}
}
public void onAction1() {
// do your stuff...
}
}
public class MainActivity implements Fragment1.FragmentListener, Fragment2.FragmentListener {
private Fragment1 fragment1;
private Fragment2 fragment2;
/**
* Listening to events from first fragment and forwarding to second fragment
*/
@Override
public void onAction1() {
fragment2.onAction1();
}
/**
* Listening to events from second fragment and forwarding to first fragment
*/
@Override
public void onAction2() {
fragment1.onAction2();
}
}
活动从片段中侦听“事件”,如果需要,将其转发给其他片段。