[英]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.