繁体   English   中英

将片段状态保存在导航抽屉中

[英]Saving state of fragment in navigation drawer

我在我的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上尝试了所有可能的解决方案

请帮我

您只能在配置更改或任何其他条件时保存状态。 在您的情况下,每次加载新片段时,由于新片段而重新恢复其生命周期。 检查一下

我认为您需要为每个访问的片段缓存/存储服务器响应(异步任务结果)。 如果是JSON,则可以将其作为字符串存储在SharedPrefs中,然后从那里取回。 这也假设现金响应有一些过期时间来刷新它。
既然你做

ft.replace(R.id.frame_container, fragment).commit();

您可以完全销毁先前显示的片段。 您也可以使用addToBackStack()而不是replace或keepInstance状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM