5

これが私のユースケースです:

ActionBarナビゲーションタブを使用して3つのタブを作成する必要があり、これを実現するためにActionBarSherlockを使用しています。3つのタブはそれぞれ、独自のフラグメントです。ただし、各タブに表示されるいくつかの一般的な情報があります(私の場合、製品のタイトル、説明)。この共通情報用に別のフラグメントを作成し、このように主要なフラグメントレイアウトのそれぞれでこのフラグメントを参照しています。

これが私の問題です:

共通情報を取得して表示するFragmentインスタンスを再利用したいと思います。以下のコードを使用していますが、メインフラグメントのそれぞれに共通フラグメントの新しいインスタンスが常に作成されているようです。

    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();         
    }
4

1 に答える 1

2

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

次のようなことができます: https://gist.github.com/anonymous/5415274

より良いオプションは、これらの両方のフラグメントで必要なデータを、それらの間で共有できる別のオブジェクトに格納することです。これにより、必要に応じて UI を接続せずに取得をテストできます。これにより、必要に応じて 2 つのフラグメントを分岐させることもできるため、両方のアクションに必要なすべてのコードを 1 つのフラグメントに保持する必要がなくなります。

于 2013-04-18T18:56:57.793 に答える