[英]How to access viewpager's fragment from activity
假設有這種情況,我們有一個活動和3個片段,例如: MyActivity
Frg1
, Frg2
和Frg3
。 Frg2
和Frg3
嵌入到viewPager中。 我需要的是觸發Frg2
從Frg1
。 我做了一個接口TriggerActivityFromFrg1
和MyActivity
實現它,當按下按鈕Frg1
我電話(getActivity) triggerActivityFromFrg1.trigger()
和方法trigger()
被調用MyActivity
,問題是如何觸發Frg2
從活動?
我想以某種方式在MyActivity和Frg2之間建立接口。
ps我不想使用事件總線。
讓您的Frg2
類也實現該接口:
public class Frg2 extends Fragment implements TriggerActivityFromFrg1 {
並實施該方法
@Override public void trigger() { if (getView() != null) { // see comments below // TODO logic here } }
在活動中添加一個字段以跟蹤目標片段:
private TriggerActivityFromFrg1 mTarget;
將注冊/注銷方法添加到活動中:
public synchronized void registerTriggerTarget(TriggerActivityFromFrg1 listener) { mTarget = listener; } public synchronized void unregisterTriggerTarget(TriggerActivityFromFrg1 listener) { if (mTarget == listener) { mTarget = null; } }
在您的活動中使觸發方法如下:
public void trigger() { if (mTarget != null) { mTarget.trigger(); } }
重寫onAttach()
和onDetach()
在Frg2
注冊/取消注冊:
@Override public void onAttach(Activity activity) { super.onAttach(activity); ((MyActivity) activity).registerTriggerTarget(this); } @Override public void onDetach() { ((MyActivity) getActivity()).unregisterTriggerTarget(this); super.onDetach(); }
恭喜,您剛剛構建了自己的迷你事件總線。
您必須添加所有這些代碼是有原因的,這是因為ViewPager
在需要它們之前不會創建片段。 MyActivity
與Frg2
分離。
擴展FragmentPagerAdapter
要記住的另一件事是,即使視圖被破壞,該片段也將保留在內存中,因此請確保您檢查該片段具有有效的視圖,即if (getView() != null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.