【问题标题】:Conditional Navigation in Android Navigation ComponentAndroid导航组件中的条件导航
【发布时间】:2019-03-27 08:20:25
【问题描述】:
我有 3 个片段 A、B 和 C,其中 A 是我的导航图的起始目的地。当用户启动应用程序时,如果有以前存储的结果,我会检查片段 A。如果有,我想直接导航到片段 C。我已经设法让它工作。但是,在这种情况下,当用户按回片段 C 时,我希望他们被带到片段 B 而不是 A,这就是我需要帮助解决的问题。
注意: Fragment A 只是一个设置片段,仅在应用启动时访问一次。这意味着当用户从片段 B 按下返回时,他们将被带到操作系统主屏幕。
【问题讨论】:
标签:
android
android-architecture-navigation
【解决方案1】:
您可以覆盖onBackPress() 并像这样用 FragmentB 替换您所在的任何片段
@Override
public void onBackPressed() {
int stackCount = getFragmentManager().getBackStackEntryCount();
if (stackCount == 1) {
super.onBackPressed(); // if you don't have any fragments in your backstack yet.
} else {
// just replace container with fragment as you normally do;
FragmentManager fm = getFragmentManager();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);//clear backstackfirst and then you can exit the app onbackpressed from home fr
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.container, new FragmentB());
transaction.commit();
}
}
这是原答案,你可以看看answer by Rainmaker
【解决方案2】:
您可以覆盖片段 C 上的 onBackPressed 并调用 navController 以返回片段 b,创建从 C 到 B 的新操作
navController.navigate(R.id.action_CFragment_to_BFragment)