【问题标题】:How to save state of fragment in navigation drawer如何在导航抽屉中保存片段的状态
【发布时间】:2014-07-22 16:45:54
【问题描述】:

我正在使用来自以下链接的 google 导航抽屉库... https://github.com/Arasthel/GoogleNavigationDrawerMenu

见下面的代码:

    mDrawer.setOnNavigationSectionSelected(new GoogleNavigationDrawer.OnNavigationSectionSelected() {
        @Override
        public void onSectionSelected(View v, int i, long l) {
            Fragment fragment = null;
            switch (i) {
            case 0:
                // fragment = new HomeFragment();
                break;
            case 1:
                fragment = new NewsFragment();

                break;
            case 2:
                fragment = new TransferFragment();
                break;
            case 3:
                fragment = new BlogsFragment();
                break;
            case 4:
                fragment = new FixturesFragment();
                break;
            case 5:
                fragment = new BestXIFragment();
                break;
            case 6:
                fragment = new FeedFragment();

                break;

            default:
                break;
            }
            if (fragment != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.main, fragment).commit();

            } else {
                // error in creating fragment
                Log.e("MainActivity", "Error in creating fragment");
            }
        }
    });

我的片段正在使用异步任务,每当我在这些片段之间切换时,异步任务就会再次加载。

那么如何保存片段的状态呢?

【问题讨论】:

标签: android android-fragments navigation-drawer


【解决方案1】:

您可以保留一个片段数组并返回相同的对象,而不是每次都创建新片段:

mDrawer.setOnNavigationSectionSelected(new GoogleNavigationDrawer.OnNavigationSectionSelected() {

Fragment[] fragments ={new HomeFragment(),new NewsFragment(),  new TransferFragment(), new BlogsFragment(),new FixturesFragment() , new BestXIFragment(),new FeedFragment()};
 @Override

    public void onSectionSelected(View v, int i, long l) {

        if (fragment[i] != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.main, fragments[i]).commit();

        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }
});

【讨论】:

  • 在开始异步任务之前的内部片段只需检查它是否正在运行
  • 发布您执行异步任务的片段之一
  • 查看 rootView = inflater.inflate(R.layout.fragment_news, container, false); getActivity().findViewById(android.R.id.content); ActionBar actionBar = getActivity().getActionBar(); mFadingActionBarHelper = new FadingActionBarHelper(actionBar, getResources().getDrawable(R.drawable.actionbar_bg)); if (savedInstanceState == null) { getFragmentManager().beginTransaction() .add(R.id.container, new ListViewFragment()).commit(); } 返回根视图;
  • 和 ListViewFragment 有异步任务
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2014-08-02
  • 1970-01-01
相关资源
最近更新 更多