【发布时间】:2014-05-07 22:22:41
【问题描述】:
我正在开发一个 android 应用程序,它使用导航抽屉在两个片段之间切换。但是,每次切换时,片段都会完全重新创建。
这是我主要活动的代码。
/* The click listener for ListView in the navigation drawer */
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
private void selectItem(int position) {
android.support.v4.app.Fragment fragment;
String tag;
android.support.v4.app.FragmentManager; fragmentManager = getSupportFragmentManager();
switch(position) {
case 0:
if(fragmentManager.findFragmentByTag("one") != null) {
fragment = fragmentManager.findFragmentByTag("one");
} else {
fragment = new OneFragment();
}
tag = "one";
break;
case 1:
if(fragmentManager.findFragmentByTag("two") != null) {
fragment = fragmentManager.findFragmentByTag("two");
} else {
fragment = new TwoFragment();
}
tag = "two";
break;
}
fragment.setRetainInstance(true);
fragmentManager.beginTransaction().replace(R.id.container, fragment, tag).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mNavTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
我设置了一些调试日志,每次调用 selectItem 时,都会销毁一个片段,而创建另一个片段。
有什么办法可以防止碎片被重新创建,而只是重复使用它们?
【问题讨论】:
-
如果您愿意转储导航抽屉,您可以使用 Viewpager。侧向滑动不会破坏碎片。但是它可能不是有效的解决方案。