2017-10-29 3 views
0
別の3つの断片を作成

フラグメント:3つのバンドルを作成せずに、3つのフラグメントにparamsを渡すより多くの解決策がありますか?

Bundle args = new Bundle(); 
args.putString(MyFragmentSort.ORDER_BY, "order1"); 
fragment1 = new MyFragmentSort(); 
fragment1.setArguments(args); 

Bundle args2 = new Bundle(); 
args2.putString(MyFragmentSort.ORDER_BY, "order2"); 
fragment2 = new MyFragmentSort(); 
fragment2.setArguments(args2); 

Bundle args3 = new Bundle(); 
args3.putString(MyFragmentSort.ORDER_BY, "order3"); 
fragment3 = new MyFragmentSort(); 
fragment3.setArguments(args3); 

、その後、私はFragmentPagerAdapter

private void setupViewPager(CustomViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager()); 
     adapter.addFragment(fragment1, "title1"); 
     adapter.addFragment(fragment2, "title2"); 
     adapter.addFragment(fragment3, "title3"); 
     viewPager.setPagingEnabled(false); 
     viewPager.setAdapter(adapter); 
} 

OKにこの3フラグメントを追加します。それは仕事です。

しかし、質問は次のとおりです。 3つの断片にパラメータを渡すより多くのsmiple解決策があります3 バンドル

+0

それを行うには、これが最善の方法です。 3バンドルの作成で何が問題になっていますか?速度とメモリの損失は最小限です。 – m0skit0

+0

あまりにも単純なタスクのコード – Alexei

+0

これは、Android APIの設計方法です。申し訳ありません。 – m0skit0

答えて

0

バンドルの値が異なる限り、3つのバンドルを作成する必要があります。

あなたの問題は、コードの量であれば、単純な機能の作成:

public static Bundle createOneEntryBundle(String key, String value) { 
    Bundle bundle = new Bundle(); 
    bundle.putString(key, value); 
    return bundle; 
} 

をあなたのコードは、もう少しコンパクトになります。

fragment1 = new MyFragmentSort(); 
fragment1.setArguments(createOneEntryBundle(MyFragmentSort.ORDER_BY, "order1")); 

fragment2 = new MyFragmentSort(); 
fragment2.setArguments(createOneEntryBundle(MyFragmentSort.ORDER_BY, "order2")); 

fragment3 = new MyFragmentSort(); 
fragment3.setArguments(createOneEntryBundle(MyFragmentSort.ORDER_BY, "order3")); 
+0

あなたの問題がタスクに必要なコード量であれば、単純な関数を作成するだけで、答えを更新したという質問の場合には、 –

+0

@AbdulWaheedのようにこの場合は必要ありません。 – Gianlu

0

に新しいバンドルを作成する必要はありませんあなたの場合。たびに文字列を置き換えてください。下のコードに示すように

Bundle args = new Bundle(); 
    args.putString(MyFragmentSort.ORDER_BY, "order1"); 

    Log.d("test", args.getString(MyFragmentSort.ORDER_BY)); 

    args.putString(MyFragmentSort.ORDER_BY, "order2"); 

    Log.d("test", args.getString(MyFragmentSort.ORDER_BY)); 

    args.putString(MyFragmentSort.ORDER_BY, "order3"); 

    Log.d("test", args.getString(MyFragmentSort.ORDER_BY)); 

私はそれをテストしました。それを試してみる必要があります

+0

これは並行性の問題を引き起こす可能性があります。 1つのフラグメントはまだバンドルを処理していませんが、すでに値を上書きしています。なぜデバッグにエラーレベルのログを使用していますか? – m0skit0

+0

それは助けにはならない。すべての3つのフラグメントは最後の設定値= "order3"を使用するので、すべてのフラグメントに対して3つの異なる値が必要です。 – Alexei

関連する問題