我将带有导航模式(ActionBar)的 FragmentActivity 设置为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 缓慢?