0

私はインターフェイス、アクティビティ、およびフラグメントの相互作用をよりよく理解しようとしています。 this link from the Android documentationによるとディープネストされたチェーン内のフラグメント間の通信方法は?

多くの場合、あなたは一つの断片がユーザーイベントに基づいてコンテンツを変更する 例えば、相互に通信することになるでしょう。すべて フラグメントとフラグメントの通信は、関連付けられた アクティビティを通じて行われます。 2つのフラグメントは決して直接通信するべきではありません。

は、彼らは、この例を与える:

public class HeadlinesFragment extends ListFragment { 
    OnHeadlineSelectedListener mCallback; 

    // Container Activity must implement this interface 
    public interface OnHeadlineSelectedListener { 
     public void onArticleSelected(int position); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (OnHeadlineSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnHeadlineSelectedListener"); 
     } 
    } 

    ... 
} 

あなたはフラグメントのネストされたチェーンを扱っている場合は、この変更を行う方法は?例えば

、のは、私が断片は、明示的であるためになど、別のフラグメントを含有していることが、その後断片を含む活動を、持っていた、と言ってみましょう:私はのために認められたベストプラクティスを理解しようとしています

Activity --> Fragment1 --> Fragment2 --> Fragment3 --> Fragment4 --> Fragment5 

たとえば、Fragment5にはEditTextとOnClickListenerが付いたButtonがあります。ボタンを押すと、そのEditTextの内容がFragment3の関数に送信されます。

私の質問:

に応じたので、私は、我々はそのインターフェイスを実装する必要があり帰り前で活性を意味する例までトップに似Fragment5のインターフェイス/リスナーを定義する必要があることを前提とドキュメンテーション、アクティビティは、フラグメント間で情報を渡す必要があります。

今、このアクティビティから、情報をFragment3にどのように渡すのですか?

+0

古いフラグメントを新しいフラグメント 'setArguments'に置き換えたときに' Bundle 'を使用してデータを転送すると、その中に役立ちます。 –

+0

@AnshulTyagiそれは私の質問には関係ありません。私はFactoryパターンについては問いません。私は子供の断片から少数の親に情報を転送する方法について尋ねています。 –

+0

あなたはOttoのようなサードパーティのライブラリを使うことができます –

答えて

1

このドキュメントでは、フラグメント通信と兄弟間通信について説明しています。彼らは親の活動を通して伝えなければならない。

子フラグメントから親フラグメント通信の場合は、直接通信することができます。

((ParentFragment) getParentFragment).doSomething(); 

インターフェイスを持ち、親フラグメントに実装できるようにすることができます。次に、子フラグメントは、別のフラグメントと直接通信することなく、インタフェースを介して親フラグメントと通信することができる。

+0

しかし、これは子フラグメントが親の断片(親の活動ではなく)に含まれていると仮定してモジュール化の原則に違反していることを意味していませんか? –

+0

兄弟の親の場合、アクティビティによってフラグメントが制御されます。アクティビティは、すべての兄弟フラグメントの直接の親です。そのため、あるフラグメントから別のフラグメントにデータをルーティングすることができます。ネストされたフラグメントの場合は実行可能ではありません。アクティビティには、その子の子フラグメントについての知識はありません。 – Bob

+0

ここを参照してください:http://www.apptrench.com/truly-reusable-fragments/#more-113 – Bob

関連する問題