2012-03-13 14 views
5

は、ここに私のユースケースである:異なるフラグメント間でAndroidフラグメントインスタンスを再利用するにはどうすればよいですか?

私はActionBar Navigation Tabsを使用して3つのタブを作成する必要があり、私はこれを達成するためにActionBarSherlockを使用しています。 3つのタブのそれぞれは、それ自身のFragmentです。しかし、各タブ(私の場合は製品のタイトル、説明)に表示される共通の情報があります。私はこの共通の情報のために別のフラグメントを作成しましたが、thisのようなメインのフラグメントレイアウトのそれぞれでこのフラグメントを参照しています。私が取得し、共通の情報を表示するフラグメントのインスタンスを再利用したい

は、ここに私の問題です。私は以下のコードを使用していますが、常にメインフラグメントのそれぞれに共通フラグメントの新しいインスタンスを作成するようです。

FragmentManager fm = getFragmentManager(); 
    f = (ProductDetailsInfoFragment) fm.findFragmentByTag("prodinfo"); 

    if (f == null) { 
     Log.d(TAG, "fragment not found...creating new instance"); 

     f = new ProductDetailsInfoFragment(); 
     f.setTargetFragment(this, 0); 
     fm.beginTransaction().replace(R.id.prod_info_fragment, f, "prodinfo").commit();   
    } 
+0

フラグメントの同じインスタンスを再利用することはできません。新しいフラグメントを作成して別のフラグメントで使用する必要があります。 –

+0

ええ、それは私が恐れていたものです。私は、データを複数回は取得しないように、キャッシュの一部にロジックを追加する必要があると思います。 – Sanjeev

答えて

2

必要に応じてフラグメントを共有できます。 ActionBar.TabListenerを実装する必要があり、onTabSelectedでは、使用するフラグメントを選択するだけです。

あなたはこのような何かを行うことができます:https://gist.github.com/anonymous/5415274

より良いオプションを使用すると、それらの間で共有することができ、別のオブジェクトにこれらの断片の両方が必要とするデータを格納することです。これにより、必要に応じてUIを接続せずに検索をテストすることができます。これにより、2つのフラグメントが必要に応じて分岐し、単一の目的になり、両方のアクションに必要なすべてのコードを単一のフラグメントに保持する必要がなくなります。

関連する問題