gpt4 book ai didi

android - 是否可以使用 Android 导航架构组件(Android Jetpack)有条件地设置 startDestination?

转载 作者:IT老高 更新时间:2023-10-28 23:03:55 27 4
gpt4 key购买 nike

我正在使用 Navigation来自 Android Jetpack在屏幕之间导航。现在我想动态设置 startDestination。

我有一个名为 MainActivity 的 Activity 还有两个 Fragment,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?

最佳答案

终于,我的查询得到了解决方案……

将下面的代码放在ActivityonCreate()方法中。

Kotlin 代码

val navHostFragment = (supportFragmentManager.findFragmentById(R.id.home_nav_fragment) as NavHostFragment)
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_main)
//graph.addArgument("argument", NavArgument)
graph.setStartDestination(R.id.fragment1)
//or
//graph.setStartDestination(R.id.fragment2)

navHostFragment.navController.graph = graph

Java 代码

NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.home_nav_fragment);  // Hostfragment
NavInflater inflater = navHostFragment.getNavController().getNavInflater();
NavGraph graph = inflater.inflate(R.navigation.nav_main);
//graph.addArgument("argument", NavArgument)
graph.setStartDestination(R.id.fragment1);

navHostFragment.getNavController().setGraph(graph);
navHostFragment.getNavController().getGraph().setDefaultArguments(getIntent().getExtras());


NavigationView navigationView = findViewById(R.id.navigationView);
NavigationUI.setupWithNavController(navigationView, navHostFragment.getNavController());

其他信息

按照@artnest 的建议,从布局中删除 app:navGraph 属性。移除后会是这个样子

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.fragment.app.FragmentContainerView
android:id="@+id/home_nav_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true" />

</FrameLayout>

在使用 fragment 标签代替 FragmentContainerView 的情况下,上述更改保持不变

关于android - 是否可以使用 Android 导航架构组件(Android Jetpack)有条件地设置 startDestination?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com