Android 通过NavigationDrawer更改保留片段
我已经设置了导航抽屉,就像android开发者中的一样。 在导航抽屉里,我现在有两块碎片。其中一个片段包含listview,其内容通过AsyncTask填充,AsyncTask通过相当耗时的文件系统搜索加载项。我已经通过配置更改实现了保留列表项的功能:Android 通过NavigationDrawer更改保留片段,android,listview,android-fragments,navigation-drawer,Android,Listview,Android Fragments,Navigation Drawer,我已经设置了导航抽屉,就像android开发者中的一样。 在导航抽屉里,我现在有两块碎片。其中一个片段包含listview,其内容通过AsyncTask填充,AsyncTask通过相当耗时的文件系统搜索加载项。我已经通过配置更改实现了保留列表项的功能: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(savedInstanceSta
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null) {
new LoadPdfList().execute(Environment.getExternalStorageDirectory());
} else {
pdfThumbs = savedInstanceState.getParcelableArrayList("pdfThumbs");
}
}
但还有一个大问题,我无法解决。当我用导航抽屉切换当前片段并切换回承载listview的上一个片段时,asynctask就会重新执行。
尽管考虑到android开发者教程中的这部分displayView代码,这种行为对我来说并不奇怪:
private void displayView(int position) {
// update the main content by replacing fragments
Fragment newFragment = null;
switch (position) {
case 0:
newFragment = new DocumentsFragment();
break;
case 1:
newFragment = new PlayerFragment();
break;
default:
break;
}
if (newFragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_container, newFragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
currentFragmentId = position;
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
我试着在transactionmanager中处理不同的可能性,但仍然无法让它运行。
我只想在通过导航抽屉更改我的片段时保留我的片段。它以什么方式不运行?你有错误吗?如果是这样,请发布错误信息。我没有收到错误。但是我的DocumentsFragment被完全重新加载,savedInstanceState包为null。我可以这么说,因为Asynctask会再次执行,这只发生在onCreate方法的if语句中。因此,我的代码正在运行,但每次输入片段时都会重新加载列表项。