2016-11-08 16 views
0

このようなシナリオでは、アクティビティと3つのフラグメントがあるとします(MyActivityFrg1,Frg2およびFrg3)。 Frg2およびFrg3は、viewPagerに埋め込まれています。私の必要性は、Frg2Frg1からトリガーすることです。私はインターフェイスTriggerActivityFromFrg1MyActivityを実装しました。Frg1のボタンを押して(getActivity) triggerActivityFromFrg1.trigger()と呼び、trigger()というメソッドがMyActivityで呼び出された場合、問題はどのようにアクティビティからトリガーするのですか?アクティビティからviewpagerのフラグメントにアクセスする方法

私はMyActivityとFrg2の間に何らかのインターフェースを作りたいと思います。

P.S.私はイベントバスを使いたくありません。

+0

if (getView() != null)がviewpagerに配置され、ビューが破壊されても記憶にとどまるので、あなたは、フラグメントが有効なビューを持っていることを確認してくださいということです異なる活動ですか? –

+0

viewPagerは同じアクティビティにあり、シナリオ – Choletski

+0

のすべてのコンポーネントについて説明しました。レイアウトファイルを投稿できますか? –

答えて

1
  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を延長した場合心に留めておくべきもう一つは、フラグメント、すなわち

関連する問題