我使用Navigation从Android Jetpack在屏幕之间导航。现在我想动态设置startDestination。
我有一个名为MainActivity的Activity和两个Fragments,FragmentA和FragmentB。
var isAllSetUp : Boolean = // It is dynamic and I’m getting this from Preferences.
If(isAllSetUp)
{
// show FragmentA
}
else
{
//show FragmentB
}
我想使用导航架构组件设置上述流程。目前我已经使用了startDestionation,如下所示,但它不能满足我的要求。
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/lrf_navigation"
app:startDestination="@id/fragmentA">
<fragment
android:id="@+id/fragmentA"
android:name="com.mindinventory.FragmentA"
android:label="fragment_a"
tools:layout="@layout/fragment_a" />
</navigation>
是否可以使用Android导航架构组件有条件地设置startDestination?
5条答案
按热度按时间jmo0nnb31#
最后,我得到了一个解决我的查询...
将下面的代码放在
Activity
的onCreate()
方法中。Kotlin代码
Java代码
附加信息
按照@artnest的建议,从布局中删除
app:navGraph
属性。在使用
fragment
标记代替FragmentContainerView
的情况下,上述更改保持不变lf3rwulv2#
一些API已经改变,不可用或自Akash's answer以来不需要。现在更简单了。
MainActivity.java
:activity_main.xml
:navigation_main.xml
:kfgdxczn3#
这可以通过navigation action来完成。因为fragmentA是你的起始目的地,所以在fragmentA中定义一个action。
请注意这两个字段:
app:popUpToInclusive="true" app:popUpTo="@id/fragmentA"
当你的MainActivity启动时,只需要使用action id进行导航,它就会删除堆栈中的fragmentA,并跳转到fragmentB。看起来,fragmentB就是你的启动目的地。
ktca8awb4#
这不是一个答案,只是一个复制的@ akka 什帕特尔回答更干净和清晰的方式
lpwwtiir5#
你可以通过编程的方式设置你的启动目的地,但是,大多数时候你的启动逻辑会参考一些远程端点。如果你不在屏幕上显示任何东西,你的UI看起来会很糟糕。
我所做的总是显示一个启动屏幕。它将确定哪个是下一个要显示的屏幕。
例如,在上图中,您可以在启动屏幕状态下询问是否有保存的LoginToken。如果它为空,则导航到登录屏幕。
登录屏面完成后,分析结果保存令牌并导航至下一片段主屏面。
当在主屏幕中按下返回按钮时,您将向启动屏幕发回一条结果消息,指示其完成应用程序。
要弹出1个片段并导航到另一个片段,可以使用以下代码: