簡體   English   中英

如何在導航抽屜中保存片段狀態?

[英]How to save state of fragment in navigation drawer?

我在我的Android應用程序中使用導航抽屜,當我重新選擇片段時,它將加載兩次。
這是我的代碼

    private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0:
        // if(fraghome!=0)
        // {
        // fraghome=0;
        fragment = new HomeFragment();
        // }
        break;
    case 1:
        fragment = new BlogsFragment();
        break;
    case 2:
        fragment = new NewsFragment();
        break;
    case 3:
        fragment = new TransferFragment();
        break;
    case 4:
        fragment = new FixturesFragment();
        break;
    // case 5:
    // fragment = new BestXIFragment();

    // break;
    case 5:
        fragment = new FeedFragment();
        break;
    case 6:
        fragment = new TwitterFragment();
        break;
    case 7:
        fragment = new FacebookFragment();
        break;
    case 8:
        fragment = new BookmarkFragment();
        break;
    default:
        break;
    }

    if (fragment != null) {

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();
        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");
    }
}

在每個片段中,我都使用異步任務,當我選擇片段時,異步任務一次又一次地啟動
請幫我

通常,在碎片中,如果碎片碎片不是當前的頂部碎片,也不是當前頂部碎片的右或左碎片,則碎片將被銷毀。 因此,asynctask被一次又一次地調用。 我假設您正在使用asynctask獲取一些數據以顯示在片段中。 因此,在執行asynctask之前,請嘗試使數據源變量為靜態,並為數據源變量檢查null。 如果數據源不為null,則顯示數據。 我添加了一些抽象代碼供您理解。 為了更好地理解,您可以查看此鏈接。 希望能幫助到你。 謝謝.....

在每個片段中.....

public class TabFragment extends Fragment{
    private static DataSource ds = null;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        /*
        .
        other view initializing work
        .
        */
        if(ds == null){
            //execute asynctask and set data to ds in asynctask
        } else {
            // set data to view.
        }
        return view;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM