我正在努力更好地理解接口,活动和碎片的相互作用。
根据this link from the Android documentation:
通常你会想要一个片段与另一个片段进行通信 示例根据用户事件更改内容。所有 片段到片段的通信是通过相关联的 活动。两个碎片永远不应该直接沟通。
他们举了这个例子:
public class HeadlinesFragment extends ListFragment {
OnHeadlineSelectedListener mCallback;
// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
...
}
如果您正在处理嵌套的片段链,这会如何变化?
例如,让我们说我有一个包含片段的活动,然后该片段包含另一个片段等。要明确:
Activity --> Fragment1 --> Fragment2 --> Fragment3 --> Fragment4 --> Fragment5
我正在尝试理解执行以下操作的最佳做法:
让我们说Fragment5有一个EditText和一个附有OnClickListener的Button。我按下按钮,EditText的内容以某种方式被发送到Fragment3中的一个函数。
我的问题:
我假设我们需要在Fragment5中定义一个接口/监听器,就像前面的示例一样,这意味着前面的Activity方式应该实现该接口,因为根据文档,活动应该在两者之间传递信息片段。
但是现在,从这个Activity,我们如何将信息传递给Fragment3?
答案 0 :(得分:1)
该文档说的是兄弟片段到片段通信。他们应该通过父活动进行沟通。
对于子片段到父片段的通信,您可以直接进行通信。
((ParentFragment) getParentFragment ).doSomething();
您可以拥有一个接口,让父片段实现它。然后子片段可以通过接口与父片段通信,而不直接与另一个片段通信。
答案 1 :(得分:1)
我希望有很多方法LocalBroadcastManager。