所以我在使用android导航组件,我有一个问题(2.2.0-rc04版本)。
我有一个welcomeFragment(wF)。我想从wF导航到另一个导航图中的lSF。我也不想在导航到lSF时从backstack(poputto,popuptinclusive)中删除wF,因为用户可能想返回它。
<fragment
android:id="@+id/welcomeFragment">
<action
android:id="@+id/action_welcomeFragment_to_nav_onboarding_seller"
app:launchSingleTop="true"
app:destination="@id/nav_onboarding_seller" />
</fragment>
导航到lSF后,后退如下所示:wF lSF
我们现在在lSF上,登录后我们想进入feedFragment(fF),它同样在一个单独的图中,但这次我们想清除所有的后退,因为如果用户登录并按下后退键,他希望应用程序退出,而不是将他带回wF或lSF,因此,我在从lSF到fF的动作中使用了poputo=“@id/loginSellerFragment popuptinclusive='true”
。
<fragment
android:id="@+id/loginSellerFragment">
<action
android:id="@+id/action_login_to_seller"
app:destination="@+id/seller" . //this is the graph that has as firstDestination, feedFragment
app:launchSingleTop="true"
app:popUpTo="@id/loginSellerFragment"
app:popUpToInclusive="true" />
</fragment>
所以在这一刻的后台应该只有fF,因为我们删除了所有直到lSF
(lSF
包括在内)
问题所在
当我在fF
并按回时,应用程序不会关闭,而是将我带到wF
(wF
应该已经从后台弹出)
我试过的
我试过使用poputo=“@id/loginSellerFragment-poputoinclusive='true”
,而不是使用poputo=“@id/welcomeFragment-poputoinclusive='true”
,效果很好,但我很确定这不是应该做的。伙计们,我错过了什么?我是不是把后挡板造错了?
此外,我尝试添加popUpTo="@id/welcomFrament popUpTo包容性='true"
后,从wF
导航到lSF
,但这将破坏我的用户体验,因为我不希望应用程序退出时,我还在登录过程中。
请注意,所有这些片段都在单独的图中。为了导航,我使用了碎片方向,例如:findNavController。导航(WelcomeFramgentDirections.actionXtoY())
对我来说,设置XML代码并没有真正解决这个问题,只能使用额外的一行代码
findNavController()
.navigate(R.id.navigationFragment,
null,
NavOptions.Builder()
.setPopUpTo(R.id.splashFragment,
true).build()
)
当您使用popUpTo
选项时,要掌握导航组件如何操作背包并不容易。
您在问题中提到的解决方案是正确的:您确实应该使用poputto=“@id/welcomeFragment”poputoinclusive=“true”
,而不是poputto=“@id/loginSellerFragment”poputoinclusive=“true”
。
我会尽力解释原因。
>
当您启动应用程序时,您的Backback将为空,并且将显示welcomeFragment。
当您从welcomFrament
导航到loginSellerFrament
时,您的后端堆栈中将包含welcomFrament
。
如果你登录,你将从loginSellerFragment导航到feedFragment,在Backback中你将拥有loginSellerFragment和welcomeFragment。
由于您使用了“poputo=”@id/welcomeFragment“,应用程序将开始从您的backbackback中弹出(删除)片段,直到到达“welcomeFragment”。由于我们使用了poputpinclusive=“true”,welcomeFragment也将被删除。
Backstack的行为应该类似于FILO(First In Last Out)堆栈,因此它将以这种方式删除片段:
首先,将删除顶部片段,即loginSellerFragment。
接下来,welcomFrament
将是顶部片段。由于我们需要弹出片段,直到到达welcomFrament
这是我们停止的地方,但是welcomFrament
也将被删除,因为popUpTo包容性="true"
并且您的后台将是空的。
如果您尝试从welcomFrament
导航回来,您将退出应用程序,因为您的背包是空的。
我希望这会有所帮助。您还可以阅读有关堆栈数据结构的更多信息。
我是Java新手,正在努力学习。我目前陷入困境,不知道为什么无法从文件夹导入。
我的代码看起来像 我的文件如下所示 当我运行程序时,我看到 我怎样才能修好它呢?
我们试图在Apache Beam管道上使用固定窗口(使用)。我们的流程如下: 从pub/sub中提取数据 反序列化JSON到Java对象 窗口事件w/固定窗口5秒 使用自定义的,将事件的每个窗口合并成一个
问题内容: 我在使用该功能时遇到了麻烦。 我只需要知道SQL查询是否返回零行。 我已经尝试过以下简单的语句: 类型是哪里。上面的代码似乎不起作用。无论是否为空,它将始终打印该消息。 我检查了SQL查询本身,当存在行时它正确返回了非空结果。 关于如何确定查询是否已返回0行的任何想法?我用谷歌搜索,找不到任何答案。 问题答案: ResultSet.getFetchSize()不返回结果数!从这里: 使
我有一个工作流,它执行一系列模糊测试,最后计算所有崩溃程序子目录中的文件总数。后来,在另一份工作中,我使用该号码向Slack发送通知。但是,由于某些原因,不会产生任何输出,最重要的是,即使崩溃程序的数量不是零,下一个作业也不会运行! 有人知道我做错了什么吗?谢谢!
我在Windows上,我已经在环境变量中设置了JDK 1.8的路径。同样在项目结构方面,我已经改变了。我有一个Maven项目。 在命令行中,如果我使用“mvn--version”,我会看到 然而,在IntelliJ中,如果我点击Run按钮,它总是指向JDK 1.7,并抛出一个错误(因为我的maven项目需要java 8)。我该怎么改变呢?谢谢 更新在遵循@BevyQ提示后,我发现Maven run