2017-03-18 28 views
0

フラグメント間の適切な通信方法ですか?フラグメント間の適切な通信方法

public class MainActivity extends AppCompatActivity implements IFragmentsHandler { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     //... 
    } 

    @Override 
    protected void startFragment1() { 
     Fragment1 f1 = new Fragment1(); 
     f1.setFragmentsHandler(this); 
     getSupportFragmentManager().beginTransaction() 
      .replace(R.id.fragment_container, f1) 
       .commit(); 
    } 

    @Override 
    protected void startFramgment2() { 
     Fragment1 f2 = new Fragment1(); 
     f2.setFragmentsHandler(this); 
     getSupportFragmentManager().beginTransaction() 
      .replace(R.id.fragment_container, f2) 
       .commit();    
    } 
} 

public class Fragment1 { 
    private IFragmentsHadnler fragmentsHandler; 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState) { 

     final View view = inflater.inflate(R.layout.fragment1, container, false); 
     //...Code... 
     fragmentsHandler.startFragment1(); 
    } 

    public void setFragmentsHandler(IFragmentsHandler fragmentsHandler) { 
     this.fragmentsHandler = fragmentsHandler; 
    } 
} 

public class Fragment2 { 
    private IFragmentsHadnler fragmentsHandler; 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState) { 

     final View view = inflater.inflate(R.layout.fragment2, container, false); 
     //...Code... 
     fragmentsHandler.startFragment2(); 
    } 

    public void setFragmentsHandler(IFragmentsHandler fragmentsHandler) { 
     this.fragmentsHandler = fragmentsHandler; 
    } 
} 

[EDIT1]:(それは明らかだったが)インターフェイスを投稿

public interface IFragmentsHandler { 
    public void startFragment1(); 
    public void startFragment2(); 
} 

私のJavaの観点から、これはOutOfMemoryEをスローします私はそれがAndroidの場合と同じではないです。とにかく、断片間のコミュニケーションの好ましい方法は何ですか?コンポーネント間で通信するために

+0

? そして、AppCompatActivityで 'protected void startFragment1()'メソッドをどのようにオーバーライドしていますか? –

+0

@ArunElectraいいえインターフェイスを追加します。コミュニケーションとは、断片1から断片2を始めることを意味します。 – JAAAY

+0

あなたはfragment1をfragment2に置き換えて、fragment1からの置換を開始したいですか? –

答えて

0

にビューロジックを実行してくださいプレゼンターに存在ビューロジックをしますか一箇所

  • でナビゲーションを実行します。 android developer guide、フラグメント間の通信は、関連付けられたアクティビティを介して行われます。

    フラグメントは、彼のインタフェースを使用してアクティビティと通信します。そして、アクティビティは、findFragmentById()を使ってFragmentインスタンスをキャプチャするか、必要に応じてFragmentインスタンスを作成し、次に他のフラグメントのパブリックメソッドを直接呼び出すことによってメッセージを配信します。

    • フラグメント1はいくつかのデータを渡したい:アクティビティによって実装されたインタフェースメソッドを使用する。
    • アクティビティメソッドは、データを受信することを実行し、(あなたのレイアウトに応じて)、交換または見つける&を作成Fragment2し、このデータを渡すか、(あなたのレイアウトに応じて)fragment2クラスにいくつかのパブリックメソッドを実行します。
    • Fragment2は、バンドルからデータを抽出したり、レイアウトに応じてデータを受け取るパブリックメソッドを実行します。

    私はあなたのコードに問題はあなたがインターフェイスの目的を誤解していると思います。メソッドを呼び出すのと同じフラグメントを開始するために使用しています。 Fragment1はonCreateView()でstartFragment1()を呼び出していますが、すでに開始されています。

    必要があれば、hereには良いチュートリアルがあります。

  • 0

    は、通信あるいは単なるコールバックイベントバスを使用することができるコード側等アプリアーキテクチャMVP、VIPERを考えます。

    • 別の場所でのビジネスロジック
    • はによるビュー、断片、アダプタ
    +0

    これは正しい方法だと理解していますが、断片が2つしかないので、アーキテクチャを混乱させたくありません。あなたは例を挙げることができますか? – JAAAY

    0

    はじめに、Googleのように、インターフェイスを使用してフラグメント間で通信することができます。

    しかし、フラグメント間で通信するための簡単な方法は、EventBusライブラリーのような(パブリッシュ/サブスクライブパターンを実装)イベントバスを使用することです。

    また、(このStackOverflowの質問を見てい:RxJava as event bus?)を独自のイベント・バスを作成するので、あなたのアプリケーションのコンポーネント間の通信を行うためにRxJavaを使用することができますが、通信の意味を正確に

    関連する問題