Androidナビゲーションコンポーネントを使用してバックスタックステータスを取得する質問する

Androidナビゲーションコンポーネントを使用してバックスタックステータスを取得する質問する

バックスタックが空の状態でバックを押すと確認ポップアップが表示され、それ以外の場合はスタック内の次のフラグメントがポップされるように、バックプレスの動作を実装したいと思います。

バックスタックの数を取得しようとしていますが、両方のフラグメントマネージャーから常に0が返されます

 getSupportFragmentManager().getBackStackEntryCount();
 getFragmentManager().getBackStackEntryCount();

フラグメント ナビゲーターの Google コードを確認すると、正規のフラグメント トランザクションを通じてバックスタックに追加されるので、動作するはずです。

FragmentNavigator.java:

 if (initialNavigation || isClearTask) {
        backStackEffect = BACK_STACK_DESTINATION_ADDED;
    } else if (isSingleTopReplacement) {
        // Single Top means we only want one instance on the back stack
        if (mBackStack.size() > 1) {
            // If the Fragment to be replaced is on the FragmentManager's
            // back stack, a simple replace() isn't enough so we
            // remove it from the back stack and put our replacement
            // on the back stack in its place
            mFragmentManager.popBackStack();
            ft.addToBackStack(Integer.toString(destId));
            mIsPendingBackStackOperation = true;
        }
        backStackEffect = BACK_STACK_UNCHANGED;
    } else {
        ft.addToBackStack(Integer.toString(destId));
        mIsPendingBackStackOperation = true;
        backStackEffect = BACK_STACK_DESTINATION_ADDED;
    }
    ft.setReorderingAllowed(true);
    ft.commit();

NavController または Navigator を通じてこの情報を取得するための API も見つかりませんでした。

ありがとう

ベストアンサー1

誰かの助けになるかもしれません:

<fragment
    android:id="@+id/YOUR_NAVIGATION_HOST_ID"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/YOUR_NAVIGATION_HOST" />
val navHostFragment = supportFragmentManager.findFragmentById(R.id.YOUR_NAVIGATION_HOST_ID)
val backStackEntryCount = navHostFragment?.childFragmentManager?.backStackEntryCount

おすすめ記事