【问题标题】:Android Fragment not added to Back StackAndroid Fragment 未添加到 Back Stack
【发布时间】:2016-01-24 14:58:45
【问题描述】:

我正在做一个基于 NavigationDrawer 的应用程序。我有一个如下所示的层次结构

NavigationDrawer --> RootFragment(未添加到后栈) --> 详情 片段(添加到后台堆栈)

现在,当用户尝试按返回按钮退出应用程序时,我正尝试向他显示一条消息。这是我正在使用的代码。

@Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStack();
        }
        else if (getFragmentManager().getBackStackEntryCount() == 0) {
            new AlertDialog.Builder(this)
                    .setMessage("Are you sure you want to exit?")
                    .setCancelable(false)
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            MainActivity.this.finish();
                        }
                    })
                    .setNegativeButton("No", null)
                    .show();

        }
        else
        {
            super.onBackPressed();
        }
    }

当我从添加到后台堆栈的详细信息片段中单击返回按钮时,我收到了警报消息。相反,我会回到根片段。

但是,如果我像这样更新代码,按下后退按钮会使用户回到根视图。所以看起来 getFragmentManager().getBackStackEntryCount() 是零,即使详细的片段被添加到后台堆栈。

@Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 0) {
            getFragmentManager().popBackStack();
        }
        else
        {
            super.onBackPressed();
        }
    }

这是我从 rootFragment 调用细节片段的方式。

FragmentManager fragmentManager = getFragmentManager();
                Fragment fragment = SubCategoryListFragment.newInstance(false);
                fragmentManager.beginTransaction()
                        .add(R.id.subCategoryDetails, fragment)
                        .addToBackStack(null)
                        .commit();

这是从导航抽屉侧菜单打开的根视图。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


    <android.support.v7.widget.RecyclerView
        android:id="@+id/categoriesRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:cacheColorHint="@android:color/transparent"/>

    <FrameLayout
        android:id="@+id/subCategoryDetails"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></FrameLayout>


</FrameLayout>

我在这里做错了什么?实现这个的正确方法是什么?

谢谢。

【问题讨论】:

    标签: android android-fragments fragmenttransaction fragment-backstack


    【解决方案1】:

    假设您正在使用支持片段,您必须在 Activity 中使用 getSupportFragmentManager()。使用getFragmentManager(),您将获得本机片段管理器。但是,在支持片段类中,getFragmentManager() 返回支持片段管理器,这可能有点混乱。

    【讨论】:

      【解决方案2】:

      在这个语句中传递一个有效的标签而不是 null

      addToBackStack(null) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多