4

(ActionBar の) ナビゲーション モードを に設定した FragmentActivity がありますActionBar.NAVIGATION_MODE_TABS

タブを使用すると、ユーザーは listFragment と mapFragment の 2 つのフラグメントを切り替えることができます。mapFragment には Google マップが含まれています。このコードは、2 つのフラグメント間の切り替えを制御します。

@Override
public void onTabSelected(ActionBar.Tab tab,
    FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, show the tab contents in the
    // container view.

    if(tab==tab_buyer_browse){
        if(mListFragment==null){
            mListFragment = new ItemListFragment(this,new ItemArrayAdapter(this));
        }
        Bundle args = new Bundle();
        args.putInt(ItemListFragment.ARG_SECTION_NUMBER,
            tab.getPosition() + 1);
        mListFragment.setArguments(args);
        getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, mListFragment).commit();
    }
    else if (tab==tab_buyer_location){
        if(mapFragment==null){
        //every time,on destroy called anyway, and exception raise. it looks like there is no point maintain a reference to mapFragment ?
            mapFragment = new ItemMapFragment(this);
        }
        getSupportFragmentManager().beginTransaction()
        .replace(R.id.container, mapFragment).commit();
    }

2 つのフラグメントへの参照を維持します。このようにして、ユーザーがタブを切り替えるたびに新しいフラグメントを作成せずに古いフラグメントを再利用できると思います。ListFragment では問題ありませんが、mapFragment に 2 回切り替えると、フラグメントが破棄されたという例外が発生します。

ユーザーがタブを切り替えるたびに新しい mapFragment を作成することになり、切り替えると UI が遅くなることが経験できます。

私の質問は、親 FragmentActivity でフラグメントの参照を維持することは良い習慣ですか?

そうでない場合、フラグメントのライフサイクルを制御する方法はありますか、または少なくともUIの遅延を回避するために可能な限り再利用する方法はありますか?

4

1 に答える 1