是否可以继续引用片段?

时间:2013-01-17 13:46:44

标签: android android-fragments android-fragmentactivity

我将FragmentActivity的导航模式(ActionBar)设置为ActionBar.NAVIGATION_MODE_TABS

选项卡允许用户在两​​个片段,listFragment和mapFragment之间切换.mapFragment包含一个谷歌地图。代码控制两个片段之间的切换。

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

我维护对这两个片段的引用。我想通过这种方式,我可以避免每次用户切换标签时创建新片段并重用旧片段。 ListFragment没有问题,但如果我切换到mapFragment TWICE,异常会引发片段被破坏。

每次用户切换选项卡时,我都会创建新的mapFragment,当我切换时,我可以体验到UI缓慢。

所以我的问题是,在父FragmentActivity中维护片段的引用是一个好习惯吗?

如果没有,我有什么方法可以控制片段的生命周期,或者至少重用它们以避免缓慢的UI?

1 个答案:

答案 0 :(得分:0)

您可以使用https://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter.html和ViewPager来制作标签式片段以及支持向左/向右滑动。它会为你处理碎片。