首页 文章

使用android导航组件获取Backstack状态

提问于
浏览
2

我想实现反向行为,这样当你向后按下Backstack为空时它会提示确认弹出窗口,否则它会弹出堆栈中的下一个片段 .

我正在尝试获得后台筹码,但我总是从两个片段管理器得到0

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

我想它应该工作,因为我检查片段导航器的谷歌代码,它通过规范片段事务添加到backstack:

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();

我没有找到任何API来通过NavController或Navigator检索此信息 .

谢谢

1 回答

  • 1

    我明白答案很晚 . 但可能会帮助别人 .

    val navHostFragment=supportFragmentManager.findFragmentById(R.id.navDrawerActivity)
    val backStackEntryCount=navHostFragment?.childFragmentManager?.fragments?.size
    
    
    <fragment
        android:id="@+id/navDrawerActivity"
        app:navGraph= "@navigation/nav_item"
        android:name=androidx.navigation.fragment.NavHostFragment
        app:defaultNavHost= "true"
    />
    

相关问题