问题标签 [jetpack-compose-navigation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
422 浏览

android - 当 Start 目的地具有 args 时,撰写导航目的地不是此 NavGraph 的直接子级

我想把这个 Compose 称为startDestination带参数。我得到了以下异常,但是如果我按预期在另一个撰写工作中调用它。

java.lang.IllegalArgumentException:导航目的地 xxx 不是此 NavGraph 的直接子级

SignInActivity

Navigation看法:

试过这个SO 答案它没有帮助。

0 投票
0 回答
54 浏览

android - 在 Android/Jetpack Compose 中手动预填充导航 backstack

是否可以在 Android/Jetpack Compose 中预填充导航回栈?

我有一个深层链接,可以深入导航层次结构,但是,在后按时,它会导航到根路由。

例子:

Route.Main -> Route.List -> Route.Details(参数:id)

深层链接: https ://mywebsite.com/details/id

当前行为:它使用正确的参数打开 Route.Details,但是,在返回时,它会打开 Route.Main

期望的行为:它应该打开 Route.List

我知道我可以手动“编程”这种行为,但我更愿意“配置”它。

0 投票
0 回答
292 浏览

android - Jetpack Compose 中的导航 - 片段/视图模型

所以我正在查看这个官方的 Compose 教程https://developer.android.com/courses/pathways/compose

有 Jetpack Compose 导航

https://developer.android.com/codelabs/jetpack-compose-navigation

所以基本上在那个示例中只有一个活动,没有片段和可组合(实现 3 个屏幕)用于导航图而不是片段

这个示例也很糟糕,因为它根本没有 ViewModel...

那么基本上一个真正的应用程序现在会是什么样子?

具有单个 ViewModel 的单个 Activity 和许多使用相同 ViewModel 的可组合组件制作的屏幕(这当然很糟糕)?或者我想我们应该在特定屏幕的每个启动可组合函数中添加一个单独的 ViewModel 而不是 Activity (它可能只有一个 ViewModel - 一个生命周期)

在此处输入图像描述

所以基本上我们现在不再需要碎片了吗?

0 投票
1 回答
63 浏览

android - 在 Compose 中使用 SavedStateHandle 传递整数导航参数时出现投射错误

我正在尝试从第一个屏幕导航到第二个屏幕,我需要提供一个整数标识符来从第二个屏幕上的 API 加载内容。

尝试传递 Int Nav 参数时遇到此错误。

java.lang.ClassCastException:java.lang.String 不能转换为 java.lang.Integer

这是我的 NavHost,我/{recipeId}在第二个屏幕的路线上用作占位符。

然后我调用navController.navigate()第一个屏幕,将idInt 类型的类型传入导航路线。

在第二个屏幕的 ViewModel 中,我使用 SavedHandleInstance 检索 nav 参数。

此时,应用程序崩溃了,我得到了上面的 logcat 输出。

请在传递 Int Nav arg 时指出我正确的方向。

0 投票
1 回答
223 浏览

android - 在 Jetpack Compose 中导航到没有先前脚手架的另一个屏幕

我的应用程序有一个带有 Scaffold 和 BottomNavigation 栏的主屏幕:

...

FeatureScreen有它自己Scaffold的 atopBar而不是 bottomBar ,当我从 导航到它时HomeScreen,我想从主屏幕替换前一个,只看到一个 topBar 但相反,我在屏幕上看到了两个栏。

有可能做到这一点吗?我认为它可以通过使用一个新的活动来完成,但理想情况下,我想保持单一活动的方法。

0 投票
1 回答
154 浏览

kotlin - Jetpack compose 如何集中 navController 并注入

我的应用程序中目前有两个NavGraphs,一个用于身份验证路由,例如登录和注册,另一个用于登录时的主路由。当我想使用它时,
我目前需要在每个可组合项中将其作为参数传递。navController这绝对是不可扩展的,所以我想知道是否可以使其可注入,以便我可以通过 DI 框架(如Koin. 我目前正在Koin我的应用程序中使用,所以如果我可以使用它的依赖注入工具将 anavController作为singleton.

当前导航设置

我目前在navController里面创建MainActifity

然后我将它传递给NavHost拥有两个的NavGraphs

以下是我NavGraph的所有身份验证路由。我还传递了NavController作为参数,以便我可以在屏幕内使用它。

登录时的NavGraph所有页面与我的身份验证类似,因此不值得展示。

如果我可以通过 Koin 创建一个navControlleras a会很酷single,但这是不可能的,因为rememberNavController函数只能在 Composable 内部调用。

有没有解决这个问题的解决方案navController

0 投票
0 回答
142 浏览

android - Android ViewModel onCleared() 调用太晚了

根据我对导航图范围视图模型onCleared的理解,当从导航堆栈中弹出关联的导航图时,应该立即调用它们的方法。我所看到的是,它需要更多的导航调用,直到onCleared实际被调用。

MainActivity.kt 内部:

ChatViewModel.kt 内部

我观察到的是以下行为:
当我导航到chat时,视图模型被正确创建打印init。通过在图中导航chat,视图模型实例被正确地重用。但是,当我导航出chat图表时,我看到它Not on stack正在打印,但onCleared不是。只有经过一些额外的导航,onCleared才会最终打印出来。

有谁知道为什么onCleared被称为延迟?

打印堆栈看起来像:

但是,如果我在chat图表中进行更多导航,onCleared则会正确调用:

0 投票
1 回答
394 浏览

android - 在导航图 NavGraph 中找不到与请求 NavDeepLinkRequest 匹配的导航目的地

我有一个看起来像这样的 NavGraph:

在 ProductDetailsS​​creen 中,我希望单击产品以进一步导航到传递产品对象的详细信息屏幕:

产品完美显示,但当我单击产品时,应用程序因以下错误而崩溃:

java.lang.IllegalArgumentException:与请求匹配的导航目的地 NavDeepLinkRequest{ uri=android-app://androidx.navigation/Product Details } 在导航图中找不到 NavGraph(0x0) startDestination={Destination(0xb543811) route=Products}

任何人都可以帮忙吗?

PS我也跟着这个答案,但没有运气:(

0 投票
0 回答
132 浏览

android - 为什么我们不能将 Serializable 对象传递给 NavArguments?

正如我在NavType文档中看到的那样,有一个名为NavType.SerializableType的子类型:

用于 Serializable NavArguments

SerializableType 的类构造函数接受一个类型的参数,该参数Class<D?>?应该是:

是 Serializable 的子类型的类。

现在,我有以下课程:

以下是 NavHost 的外观:

我使用以下内容从起始目的地(产品屏幕)导航到(产品屏幕):

我因这个错误而崩溃:

可序列化不支持默认值。

但是,如果我通过删除更改上述内容/{product}

并按照此处的说明进行导航:

我得到:

java.lang.IllegalArgumentException:与请求匹配的导航目的地 NavDeepLinkRequest{ uri=android-app://androidx.navigation/Product } 在导航图中找不到 NavGraph(0x0) startDestination={Destination(0xb543811) route=Products}

如何将 Product 类型的 Serializable 对象添加到 NavArguments 并正确返回?我不想将对象转换为 JSON 字符串。这甚至可能吗?

0 投票
1 回答
101 浏览

android - 如果在 android jetpack compose 中为 NavigationBar 选择和取消选择,如何更改图标,例如我们在 xml 中用于选择状态的选择器?

我想使用基于 NavigationBar 中选定状态的轮廓和填充图标,就像谷歌地图应用程序一样,使用 jetpack compose。在 xml 的情况下,我们使用选择器,那么我们在 compose 中使用什么?

这是我的代码->

MainActivity.kt

屏幕.kt

HomeScreen.kt

我还需要使用选择器 xml 还是在 jetpack compose 中有替代方法?