【问题标题】:Saving state of fragment in navigation drawer在导航抽屉中保存片段的状态
【发布时间】:2014-08-20 05:08:58
【问题描述】:

我在我的 android 应用程序中使用导航抽屉..
每个片段都包含从互联网获取数据并显示在自定义列表中的异步任务。

这里是选择片段的代码:

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

请帮帮我

【问题讨论】:

    标签: android android-fragments android-asynctask navigation-drawer


    【解决方案1】:

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

    【讨论】:

    • 那么有没有其他选择片段的解决方案?请帮助我@james
    • @Yogi 您是否只想在使用后退按钮时打开页面。然后你可以使用 addtobackStack()
    • 没有朋友..我想在片段之间切换时保存片段的状态..我不想在切换片段时一次又一次地加载异步任务..
    • 请帮帮我@james
    【解决方案2】:

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

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

    你完全破坏了之前显示的片段。您也可以使用 addToBackStack() 而不是替换或使用 retainInstance 状态。

    【讨论】:

    • 我尝试了所有这些但它不起作用......请其他一些解决方案
    • 你真的尝试缓存响应吗?我不敢相信它是真的 :) 如果您真的尝试过,请显示相应的代码。
    • 对不起,我没试过……我不知道该怎么做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多