7

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>

ここで何が間違っていますか?これを実装する正しい方法は何ですか?

ありがとう。

4

2 に答える 2

3

サポートフラグメントを使用getSupportFragmentManager()していると仮定すると、アクティビティで使用する必要があります。これgetFragmentManager()で、ネイティブ フラグメント マネージャーが取得されます。ただし、サポート フラグメント クラスでgetFragmentManager()は、サポート フラグメント マネージャが返されるため、少し混乱する可能性があります。

于 2016-01-24T15:05:18.410 に答える
2

このステートメントで null の代わりに有効なタグを渡します

addToBackStack(null) 
于 2016-01-24T15:02:41.010 に答える