问题标签 [android-jetpack-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 投票
2 回答
214 浏览

android - 使用 Jetpack Navigation 移动到 MainActivity

如何从 MainActivity 中的 SettingsListFragment 移动?

因为在我的导航图中我没有来自 MainActivity 的屏幕。我在一项活动中有整个导航,你可以检查代码

0 投票
1 回答
5525 浏览

android - 将数据从一个视图模型传递到另一个 android MVVM

我有一个与设计相关的问题要问你们。

因此,我一直在按照Google 的应用程序架构指南使用 Kotlin、MVVM 和数据绑定来构建我的应用程序。我正在使用 Google 规定的 Jetpack 组件(导航、实时数据等)。

问题是在开发过程中很多时候我需要将数据从一个片段传输到另一个片段。之前我曾经创建片段的实例并添加复杂数据,然后移动到片段,如下所示:

导航在目的地之间传递数据应该是这样的或者使用同一文档中也提到的共享视图模型。>>

一般来说,您应该强烈希望在目的地之间只传递最少量的数据。例如,您应该传递一个键来检索对象,而不是传递对象本身,因为所有保存状态的总空间在 Android 上是有限的。如果您需要传递大量数据,请考虑使用在片段之间共享数据中描述的 ViewModel。

这行得通。

问题是使用架构的主要原因之一是关注点分离;这样我们就可以编写干净且可维护的代码。sharedviewmodel 的这种使用违背了这个目的(根据我的理解),因为这会导致大型 ViewModel 类。

我将尝试用一个很常见的场景来解释这个问题。

我有一个带有数据列表的片段。列表中的每个项目对应一个用户。当我们点击一​​个项目时,它应该移动到用户详细信息屏幕,如果我们点击编辑按钮,我们应该移动到可以编辑详细信息的编辑屏幕。

因此在这种情况下,ViewModel 将在这 3 个 Fragment 之间共享,因为 User 数据需要从列表类发送到视图和编辑 Fragment,并且共享的 ViewModel 将具有所有三个 Fragment 的业务逻辑。

所以这对我来说似乎不合适,因为 ViewModel 在许多情况下会太复杂而无法像这样共享:

将给出视图模型的相同实例。

我需要知道我对这个 sharedviewmodel 的理解是否错误,如果是,请纠正我。如果我的理解是正确的,请告诉我在这种情况下如何更有效地管理视图模型。

0 投票
1 回答
779 浏览

android - 在导航中添加安全参数时出错

我试图将安全参数添加到我的片段中。我在关注这个 codelab:Navigation Codelab。但是,当我使用以下行时:

我得到一个编译器错误:

分类器“FlowStepFragmentArgs”没有伴随对象,因此必须在此处初始化

这是我的主要 gradle 文件:

和我的应用程序 gradle 文件:

我的 navigation.xml 是:

我已经多次清理项目,但没有效果。谁能指出我在这里犯的错误?

0 投票
1 回答
719 浏览

android - 如何处理 NavController 目标更改?

我想实现 addOnDestinationChangedListener 但是,没有运气。我试过自己实现它,但是 id 不匹配

我尝试记录它,这是结果

0 投票
1 回答
523 浏览

android - 选项卡布局中的此 NavController 未知

我正在实现一个导航组件,但是当我的片段位于选项卡布局内时出现问题,它显示如下错误:

/action_previousMatchFragment_to_detailMatchFragment 对此 NavController 是未知的

完整的错误是:

java.lang.IllegalArgumentException:导航目的地 com.example.rifqi.footballapp:id/action_previousMatchFragment_to_detailMatchFragment 对此 NavController 是未知的

0 投票
2 回答
891 浏览

android - 如何在jetpack-navigation中保存状态列表

我使用 jetpack-navigation 设计了一个应用程序当我从一个片段移动到另一个片段时,出现如下图所示的问题,列表的状态消失了。

事实上,当从一个布局返回时,文章将在堆栈中重新创建,并且不会保存列表状态,用户将不得不再次滚动。请帮我?

喷气背包导航

0 投票
1 回答
2552 浏览

android - 将 Serializable 用作 Android 导航组件的深层链接参数

使用深层链接时是否可以使用自定义Serializable对象作为片段参数?

我尝试了以下方法 - 在我的导航图 XML 文件中,我添加了以下几行:

EventId可序列化的数据类在哪里:

然后,当我尝试使用 URL 运行我的应用程序时myapp://event/4002,会引发以下异常:

long用( )替换类型可以app:argType="long"解决问题 - 没有例外,一切都按预期工作。

导航库似乎不知道如何将原始值从 URL 转换为我的EventId类。是否有可能以某种方式注册一个知道如何转换它的适配器?或者也许还有另一种解决方案?

0 投票
1 回答
956 浏览

android - 从共享表启动应用程序时导航到特定片段

我在我的应用程序中使用 Jetpack Navigation,它有一个活动和两个片段(片段 A 也是主片段,片段 B 可以从片段 A 导航)。

如下所示intent-filter添加了一个可以接受纯文本的内容。MainActivity

当用户从 Android 共享表中选择我的应用程序时,最终目标是将接收到的数据从 Intent 传递到 Fragment B。目前,我在 Fragment A(Home Fragment)中接收 Intent,然后使用NavController导航到 Fragment B使用下面的代码。

问题是,当片段 B 打开时,按下工具栏的后退按钮或后退箭头(即使多次按下),片段 A 不会出现,而片段 B 会继续重新出现。

我不知道我错过了什么。当用户从另一个应用程序内的共享表打开应用程序时,这是打开特定片段的正确方法吗?

编辑

activity_main.xml

0 投票
1 回答
139 浏览

java - Android - Jetpack Navigation

After creating a new project and select Navigation Drawer Activity using Kotlin language in Android Studio, the navigation is working like a charm. But when I generate the same project with Java language, it won't navigate to another fragment. What's wrong with this? Anyone can help me?

0 投票
0 回答
185 浏览

android-actionbar - 将 BottomNavigationView 与 NavController 一起使用并且每个 Fragment 都有自己的 Toolbar 时出现动画问题

我正在使用一些最新的 Android Jetepack 组件在 Kotlin 中开发一个应用程序。我最近遇到了以下情况:

当使用BottomNavigationViewwithNavController并且每个Fragment都有自己的Toolbar. 问题是当从 Fragment A 过渡到 Fragment B 时, Fragment A和B 中对标题ActionBar 导航图标的更改会更新。理想情况下,为了平滑过渡,Fragment A 中 AppBar 的状态不会发生变化。怀疑这可能源于这些属性不“属于”的事实,因为这似乎不会以同样的方式影响工具栏的菜单项。Toolbar

AppBar 标题的解决方法是在其各自的 fragment_layout.xml 中设置每个 Toolbar 的 title 属性,同时还从 navFragment.xml 中删除 label 属性(通常在使用时负责设置 AppBar 的标题文本导航控制器)。

但是,这并不能解决诸如向上/主页按钮之类的操作栏导航图标不会出现在顶级目的地但会出现在其他目的地的问题。所以在我的情况下,它仍然显得很笨拙。

我已经按如下方式连接了导航:

MainActivity.kt

ExampleFragment.kt

哈!