[英]How to use interface to communicate between fragment and activity?
[英]Interface between activity and fragment becomes null automatically
我有一个带有菜单按钮和两个按钮的活动。 我有三个片段 Frag_A、Frag_B 和 Frag_C。 默认情况下,我使用片段 Frag_A 加载活动。 基于单击活动中的不同按钮,我在片段之间切换。
对于访问活动按钮的片段,我创建了一个接口 BasicClickListener 并让活动实现了该接口。
public interface BasicClickListeners {
void onMenuClick();
void goToFragment2();
void goToFragment3();
}
我在所有片段中实现了两种方法:
public synchronized void registerBasicListener(BasicClickListeners listener) {
basicClickListeners = listener;
}
private synchronized void unregisterBasicListener() {
basicClickListeners = null;
}
因此,每当我通过活动启动片段时,我都会从活动中调用 registerBasicListener() 方法。 在所有片段的 onDestroy() 上,我调用 unregisterBasicListener。
@Override
public void onDestroy() {
super.onDestroy();
unregisterBasicListener();
}
现在,如果我想 go 从片段 1 到片段 2,我使用来自片段 2 的 basiClickListeners.goToFragment2() ,它可以工作。
我不知道为什么有时我会在 basicClickListeners 上获得 NPE。 即使片段处于活动状态,basicClickListeners 怎么会变成 null? 而且它并不总是发生。 只有某些时候。 我无法确定它为什么发生的模式。 请帮助我解决这个问题。
您可以在Fragment
中使用onAttach()
和onDetach()
重写方法来注册和清除接口侦听器。 此外,请确保该接口已在您的活动中实现。 然后,您可以使用mCallback
引用来调用goToFragment2()
、 goToFragment3()
方法。
你的片段
public class YourFragment extends Fragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mCallback = (BasicClickListeners) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString()
+ " must implement BasicClickListeners");
}
}
@Override
public void onDetach() {
mCallback = null;
super.onDetach();
}
}
你的活动:
public class MainActivity extends AppCompatActivity
implements BasicClickListeners {
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.