簡體   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