繁体   English   中英

Android片段未添加到Back Stack

[英]Android Fragment not added to Back Stack

我正在做一个基于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>

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

谢谢。

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

在此语句中传递有效标签,而不是null

addToBackStack(null) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM