我在我的Android应用程序中使用导航抽屉..
每个片段都包含异步任务,从Internet获取数据并显示在自定义列表中。
以下是选择片段的代码:
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
String TAG=null;
switch (position) {
case 0:
fragment = new HomeFragment();
TAG=new String("Home");
break;
case 1:
// fragment = new BlogsFragment();
fragment = new BlogsFragment();
break;
case 2:
// fragment = new NewsFragment();
fragment = new NewsFragment();
break;
case 3:
fragment = new TransferFragment();
break;
case 4:
fragment = new FixturesFragment();
break;
case 5:
fragment = new FeedFragment();
break;
case 6:
// fragment = new TwitterFragment();
fragment = new TwitterFragment();
break;
case 7:
// fragment = new FacebookFragment();
fragment = new FacebookFragment();
break;
case 8:
// fragment = new BookmarkFragment();
fragment = new BookmarkFragment();
break;
default:
break;
}
if (fragment != null) {
ft.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
但是当我在片段之间切换时,异步任务又开始加载数据。
那么如何保存片段状态
我在stackoverflow上尝试了所有可能的解决方案
请帮帮我
答案 0 :(得分:0)
您只能在配置更改或任何其他条件时保存状态。在你的情况下,每次你加载新的片段,因为它再次恢复其生命周期。 查看this
答案 1 :(得分:0)
我认为您需要为每个访问过的片段缓存/存储服务器响应(异步任务结果)。如果它的JSON你可以将它作为字符串存储在SharedPrefs中,然后从那里取回它。这也假设兑现响应的一些到期时间来刷新它。
既然你做了
ft.replace(R.id.frame_container, fragment).commit();
你完全破坏以前显示的片段。您也可以使用addToBackStack()而不是replace或者使用retainInstance状态。