簡體   English   中英

如何從活動中訪問viewpager的片段

[英]How to access viewpager's fragment from activity

假設有這種情況,我們有一個活動和3個片段,例如: MyActivity Frg1Frg2Frg3 Frg2Frg3嵌入到viewPager中。 我需要的是觸發Frg2Frg1 我做了一個接口TriggerActivityFromFrg1MyActivity實現它,當按下按鈕Frg1我電話(getActivity) triggerActivityFromFrg1.trigger()和方法trigger()被調用MyActivity ,問題是如何觸發Frg2從活動?

我想以某種方式在MyActivity和Frg2之間建立接口。

ps我不想使用事件總線。

  1. 讓您的Frg2實現該接口:

     public class Frg2 extends Fragment implements TriggerActivityFromFrg1 { 

    並實施該方法

      @Override public void trigger() { if (getView() != null) { // see comments below // TODO logic here } } 
  2. 在活動中添加一個字段以跟蹤目標片段:

      private TriggerActivityFromFrg1 mTarget; 
  3. 將注冊/注銷方法添加到活動中:

      public synchronized void registerTriggerTarget(TriggerActivityFromFrg1 listener) { mTarget = listener; } public synchronized void unregisterTriggerTarget(TriggerActivityFromFrg1 listener) { if (mTarget == listener) { mTarget = null; } } 
  4. 在您的活動中使觸發方法如下:

      public void trigger() { if (mTarget != null) { mTarget.trigger(); } } 
  5. 重寫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在需要它們之前不會創建片段。 MyActivityFrg2分離。

擴展FragmentPagerAdapter要記住的另一件事是,即使視圖被破壞,該片段也將保留在內存中,因此請確保您檢查該片段具有有效的視圖,即if (getView() != null)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM