2017-12-13 42 views
1

アクティビティにいくつかの異なるフラグメントがある場合、どのようにフラグメント間で通信するのが最も安全ですか?
callbackを使用しましたが、コンストラクタで渡しましたが、今はクラッシュしました。
私はがクラッシュの原因であると考えています。アプリケーションがバックグラウンドにあり、ユーザーがアプリケーションに戻り、コールバックがnullの場合です。
大きな問題があります。アクティビティにフラグメントがたくさんある場合、アクティビティでコールバックを実装するのは難しく混乱します。
私はEventBusをテストしましたが、私の目的はちょうど1つのフラグメントであり、少し厳しいですし、フラグメントは親フラグメントからデータを取得する必要があります。 あなたはより良い方法を知っていますか?
my structure
私は多くの断片A、B、C、...を持っています。フラグメントAが更新されると、フラグメントBも更新する必要があります。これは、フラグメントCを更新するとき、他のフラグメントでも同じです.Dも更新する必要があります。
インターフェイスを使用する場合は、多くのインターフェイスを記述する必要があります。他の提案はありますか?アンドロイドの断片間の通信に最適な構造は何ですか?

+0

あなたは、コンテナの活動を経てフラグメントとの間のすべてのあなたのcommunationを使用することができます – Lucky

+0

あなたは ' –

答えて

1

これにはBundleクラスを使用できます。別のフラグメントで

Bundle args = new Bundle(); 
args.putString("my_value", "hello world"); 
Fragment1 fragment1 = new Fragment1(); 
fragment1.setArguments(args); 

値受信する:YourFragment2Nameで確認変数は、公開する必要があります作る

String requiredValue = getArguments().getString("my_value"); 
0
if (getActivity() instanceof YourActivityName) 
{ 
     ((YourFragment2Name)getActivity()).variable); 
} 

//を。

0

すべてが期待するシナリオに依存します。

public class MainActivity extends AppCompatActivity implements MyFragment.FragmentCallback { 

    //onCreate 



    @Override 
    public void onClickButton(MyFragment fragment) { 
     // Do your Task 
    } 
} 
+0

私はuse'Interfaceでき

Using Interface Using Broadcast Receivers Using Container Activity Using EventBus or Alternative Libs Using Observers (Rx Pattern) 

インタフェース通信のために

public class MyFragment extends Fragment { interface FragmentCallback { void onClickButton(MyFragment fragment); } private FragmentCallback mCallback; @Override public void onClick(View v) { switch (v.getId()) { mCallback.onClickButton(this); } } } 

and Activityでご確認ください自分のコードがきれいに保たれているアクティビティでインターフェイスを実装するための規則的なパターンを探しています。 –

+0

私はもう少し説明しました。 –

関連する問題