当前位置: 首页 > 知识库问答 >
问题:

在抽屉菜单片段中保留状态

敖子安
2023-03-14

我有一个导航抽屉项目,我只是从“创建新项目”修改

下面是我用来显示所选片段的代码的一部分:

private void selectItem(int position) {
        mCurrentSelectedPosition = position;
        if (mDrawerListView != null) {
            mDrawerListView.setItemChecked(position, true);
        }
        if (mDrawerLayout != null) {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
        if (mCallbacks != null) {
            mCallbacks.onNavigationDrawerItemSelected(position);
        }

        Fragment fragment = null;
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        FragmentManager fm = getFragmentManager();

        switch (position) {
            case 0:
                fragment = fm.findFragmentByTag("fragmentDashboard");
                if (fragment == null){
                    fragment = new Dashboard();
                    transaction.replace(R.id.container, fragment, "fragmentDashboard");
                    transaction.addToBackStack(null);
                    transaction.commit();
                }else{
                    transaction.remove(getFragmentManager().findFragmentByTag("fragmentDashboard"));
                    transaction.commit();
                    fm.popBackStack();
                }

                break;
            case 1:
                fragment = fm.findFragmentByTag("fragmentExpenses");
                if (fragment == null) {
                    fragment = new Expenses();
                    transaction.replace(R.id.container, fragment, "fragmentExpenses");
                    transaction.addToBackStack(null);
                    transaction.commit();
                }else{
                    transaction.remove(getFragmentManager().findFragmentByTag("fragmentExpenses"));
                    transaction.commit();
                    fm.popBackStack();
                }

                break;


            default:
                break;
        }
    }

编辑:这个问题用导航抽屉保存片段状态是我解决问题的最接近的方法,但答案太简单了。。我对Android开发还很陌生。有人能帮忙吗?

共有1个答案

姬天宇
2023-03-14

描述:

  • 而不是破坏碎片。。。。第一次创建片段,每隔一次找到片段并使用它,而不是替换它

而不是代码:

   private void selectItem(int position) {
            mCurrentSelectedPosition = position;
            if (mDrawerListView != null) {
                mDrawerListView.setItemChecked(position, true);
            }
            if (mDrawerLayout != null) {
                mDrawerLayout.closeDrawer(mFragmentContainerView);
            }
            if (mCallbacks != null) {
                mCallbacks.onNavigationDrawerItemSelected(position);
            }

            Fragment fragment = null;
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            FragmentManager fm = getFragmentManager();

            switch (position) {
                case 0:
                    fragment = fm.findFragmentByTag("fragmentDashboard");
                    if (fragment == null){
                        fragment = new Dashboard();
                        transaction.replace(R.id.container, fragment, "fragmentDashboard");
                        transaction.addToBackStack(null);
                        transaction.commit();
                    }else{
                        transaction.remove(getFragmentManager().findFragmentByTag("fragmentDashboard"));
                        transaction.commit();
                        fm.popBackStack();
                    }

                    break;
                case 1:
                    fragment = fm.findFragmentByTag("fragmentExpenses");
                    if (fragment == null) {
                        fragment = new Expenses();
                        transaction.replace(R.id.container, fragment, "fragmentExpenses");
                        transaction.addToBackStack(null);
                        transaction.commit();
                    }else{
                        transaction.remove(getFragmentManager().findFragmentByTag("fragmentExpenses"));
                        transaction.commit();
                        fm.popBackStack();
                    }

                    break;


                default:
                    break;
            }
        }

使用此项:

   private void selectItem(int position) {
            mCurrentSelectedPosition = position;
            if (mDrawerListView != null) {
                mDrawerListView.setItemChecked(position, true);
            }
            if (mDrawerLayout != null) {
                mDrawerLayout.closeDrawer(mFragmentContainerView);
            }
            if (mCallbacks != null) {
                mCallbacks.onNavigationDrawerItemSelected(position);
            }

            Fragment fragment = null;
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            FragmentManager fm = getFragmentManager();

            switch (position) {
                case 0:
                    fragment = fm.findFragmentByTag("fragmentDashboard");
                    if (fragment == null){
                        fragment = new Dashboard();
                        transaction.add(R.id.container, fragment, "fragmentDashboard");
                        transaction.addToBackStack(null);
                        transaction.commit();
                    }else{
                        transaction.show(getFragmentManager().findFragmentByTag("fragmentDashboard"));
                        transaction.commit();
                        fm.popBackStack();
                    }

                    break;
                case 1:
                    fragment = fm.findFragmentByTag("fragmentExpenses");
                    if (fragment == null) {
                        fragment = new Expenses();
                        transaction.add(R.id.container, fragment, "fragmentExpenses");
                        transaction.addToBackStack(null);
                        transaction.commit();
                    }else{
                        transaction.show(getFragmentManager().findFragmentByTag("fragmentExpenses"));
                        transaction.commit();
                        fm.popBackStack();
                    }

                    break;


                default:
                    break;
            }
        }

查看开发者网站了解更多信息

 类似资料:
  • 我正在android应用程序中使用导航抽屉<每个片段都包含从internet获取数据并显示在自定义列表中的异步任务。 这是选择片段的代码: 但当我在片段之间切换时,一个异步任务再次开始加载数据<那么如何保存片段的状态呢 我在stackoverflow上尝试了所有可能的解决方案 请帮帮我

  • 你好,我有一个关于Android导航抽屉的问题。我在我的应用程序中包含了导航抽屉,一切都很顺利,但我想将图像添加到列表中的每个菜单中。 我是Android新手,所以如果有人能帮助我,我将不胜感激,这是导航抽屉的源代码 http://javatechig.com/android/navigation-drawer-android-example 这是我的WebViewFragments文件 这是我的

  • 我对android比较陌生,我想在我的应用程序中添加一个导航抽屉,所以我添加了一个新的活动并选择导航抽屉活动 活动类 当我运行应用程序并尝试点击另一个项目时,什么都没有发生,它会保留在主片段上。到目前为止,我看到的大多数信息都是在3.6.3版本之前的旧信息,其他信息只是我到目前为止尝试过的工作——卸载并重新安装android studio——更新到最新的android studio(目前为4个)—

  • 问题内容: 我想在使用Android的导航抽屉切换片段时保存片段的状态。如果该片段先前已加载,则不应刷新。可能吗? 问题答案: 要保持片段的状态,您必须在片段的内调用。它能做什么: 控制是否在活动重新创建期间保留片段实例(例如通过配置更改)。 这样可以保持活动重新创建的状态,但是在这种情况下,将不会重新创建活动,而是使用抽屉手动切换片段。在这种情况下,您不必在抽屉的click侦听器中创建新的片段,

  • 我想在使用androids导航抽屉切换片段时保存片段的状态。如果片段先前已加载,则不应刷新。有可能吗?

  • 我是android新手,我将设计这种对我来说很复杂的布局。这是主_活动的代码。xml文件: 基本上,我的主要活动中有一个导航抽屉和3个选项卡。这是一张照片: 一切按我的意愿进行,我很高兴。 当我点击导航抽屉项目时,我开始了一个新的意图来打开一个新的活动,这很好,但抽屉当然会消失(因为新活动没有抽屉)。我想把抽屉一直放在屏幕上。 为了把抽屉放在屏幕上,我想我可以把上面XML的TabLayout作为一