【发布时间】:2016-05-04 04:47:01
【问题描述】:
我正在努力更好地理解接口、活动和片段之间的相互作用。
根据this link from the Android documentation:
通常你会希望一个 Fragment 与另一个 Fragment 进行通信,因为 基于用户事件更改内容的示例。全部 片段到片段的通信是通过关联的 活动。两个 Fragment 永远不应该直接通信。
他们举了这个例子:
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,它包含一个 Fragment,然后该 Fragment 包含另一个 Fragment,等等。明确地说:
Activity --> Fragment1 --> Fragment2 --> Fragment3 --> Fragment4 --> Fragment5
我正在尝试了解执行以下操作的公认最佳做法:
假设 Fragment5 有一个 EditText 和一个附有 OnClickListener 的 Button。我按下按钮,EditText 的内容以某种方式发送到 Fragment3 中的函数。
我的问题:
我假设我们需要在 Fragment5 中定义一个接口/侦听器,就像上面的示例一样,这意味着前面的 Activity 方式应该实现该接口,因为根据文档,活动应该在之间传递信息片段。
但是现在,从这个Activity中,我们如何将信息传递给Fragment3呢?
【问题讨论】:
-
使用
Bundle来传输数据,当你用新片段替换旧片段时setArguments会帮助你。 -
@AnshulTyagi 这与我的问题无关——我不是在问工厂模式。我在问你如何将一个孩子的信息传递给几个父母。
-
可以使用 Otto 等第三方库
标签: java android android-fragments android-activity interface