Java 与活动通信的片段
我对如何与片段和活动进行通信感到困惑。例如,这里定义了一个接口() 最后,从MainActivity调用以下方法Java 与活动通信的片段,java,android,android-fragments,interface,Java,Android,Android Fragments,Interface,我对如何与片段和活动进行通信感到困惑。例如,这里定义了一个接口() 最后,从MainActivity调用以下方法 public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{ ... public void onArticleSelected(int position) { // Do something
public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{
...
public void onArticleSelected(int position) {
// Do something
}
}
我的问题是:
mCallback = new OnHeadSelectedListener() {
@Override
public void onArticleSelected(int position)
// Do something
}
然后在MainActivity中以某种方式引用mCallback,以某种方式利用onArticleSelected方法。然而,在示例代码中,该行智能地粘附到“an”接口。这是怎么发生的mCallback是您的活动,在片段的onAttach方法中,您将活动设置为片段的侦听器。通过这种方式,在调用mCallback.onArticleSelected(位置)时通知活动是正常的
接口,并且您的活动实现了该接口,因此当您将活动用作此接口的实例时,选择该方法没有任何歧义,'因为在将活动用作OnHeadlineSelectedListener
接口的实例时,您所知道的关于它的所有信息都是其中存在onArticleSelected(int)
方法
事件总线
方法,因为它使我们能够以低耦合的方式组织代码。下面是事件总线
模式的一些不错的实现:
如果您对这种方法感兴趣,请查看它们。关于问题的第一部分 您应该看看
onAttach
和onDetach
方法-
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallbacks = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement OnHeadlineSelectedListener.");
}
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}
第二部分-
这种行为是不可预料的。
您不应该将活动类设置为静态的。您遗漏了一件事,即活动将侦听器设置为事件总线方法的片段+1。顺便说一句,GreenRobot的EventBus非常简单但功能强大,我真的推荐它!你说得太对了!谢谢你结束了我这几天的痛苦。
mCallback = new OnHeadSelectedListener() {
@Override
public void onArticleSelected(int position)
// Do something
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallbacks = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement OnHeadlineSelectedListener.");
}
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}