简体   繁体   English

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

[英]Saving state of fragment in navigation drawer

i am using navigation drawer in my android app.. 我在我的Android应用程序中使用导航抽屉。
Each of fragment contains async task which getting data from internet and displaying in custom list. 每个片段都包含一个异步任务,该任务从Internet获取数据并显示在自定义列表中。

Here is code for selecting fragment: 这是选择片段的代码:

     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");
    }

}

But when i am switching between fragments an async task started loading data again.. 但是,当我在片段之间切换时,异步任务再次开始加载数据。
So how to save state of fragment 那么如何保存片段状态

I tried all the possible solution on stackoverflow 我在stackoverflow上尝试了所有可能的解决方案

please help me 请帮我

You can only save the state when your configuration changes or any other conditions. 您只能在配置更改或任何其他条件时保存状态。 In your case each time you are loading the new fragment due to which it again resumes its life-cycle. 在您的情况下,每次加载新片段时,由于新片段而重新恢复其生命周期。 Check this 检查一下

I think you need to cache/store the server response (async task result) for every visited fragment. 我认为您需要为每个访问的片段缓存/存储服务器响应(异步任务结果)。 If its JSON you could store it as string in SharedPrefs and then just take it back from there. 如果是JSON,则可以将其作为字符串存储在SharedPrefs中,然后从那里取回。 This also assumes some expiration time for cashed responses to refresh it. 这也假设现金响应有一些过期时间来刷新它。
Since you do 既然你做

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

you destroy previously shown fragment completely. 您可以完全销毁先前显示的片段。 You could also play with addToBackStack() instead of replace or with retainInstance state. 您也可以使用addToBackStack()而不是replace或keepInstance状态。

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

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