问题标签 [android-safe-args]

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 投票
1 回答
4792 浏览

android - 在 safeArgs 中将 ArrayList 作为参数传递

我试图ArrayList<String>在使用 safeArgs 时将 an 作为参数传递。但是当我从可序列化和构建列表中选择 ArrayList 时,它会抛出这些异常

我知道我必须为 ArrayList 设置 dataType,但在从导航图屏幕设置 safeArgs 时,我无法执行此操作,也没有选项。

在导航图 XML 中,代码生成为

有没有办法在导航图的 XML 中声明数据类型?

0 投票
1 回答
282 浏览

android - 如何在使用导航组件和 safeArgs 从回收器视图导航到片段时添加共享元素转换?

我想显示从我的回收器视图到片段类的共享元素转换,我编写了以下代码:

它在 .navigate 处显示错误:

在片段类中,我正在使用:

似乎 safeArgs 不允许显示转换。我是 Android 新手,很难理解过渡和动画。请帮帮我,我在这里卡了这么多天了

0 投票
0 回答
582 浏览

kotlin - Android Jetpack 安全参数问题

我有一个应用程序,它有一个主要活动和 3 个片段。让我们将它们命名为 A、B 和 C,如下所示:

碎片

  • 片段 A 有一个 RecyclerView。当我单击 RecyclerView 中的项目时,它会将安全参数中的 Account 对象传递给显示数据的 Fragment B。

  • 在 Fragment B 中,用户可以按下编辑按钮来编辑 Account 对象,然后将他/她导航到 Fragment C。

  • 在 Fragment C 中,用户既可以按返回键取消修改并返回 Fragment B,也可以修改并按保存返回 Fragment A。

这里的问题是,如果在按下编辑按钮后,用户进行了一些修改,然后按下后退按钮而不保存,它仍然会临时修改对象(暂时因为如果我关闭应用程序然后再次打开它,对象会重置恢复到原来的状态。)。

下面是我的代码(这是一个简单的代码,只是为了重现问题):

片段 A.kt

片段 A.kt

片段 B.xml

片段 B.kt

片段 C.xml

片段 C.kt

片段 C 视图模型

导航.xml

下面是该问题的演示:

问题演示

我尝试了一种快速破解方法,我保存了一个未修改的帐户对象的实例,在用户离开片段之前,我通过分配每个变量来重置更改,但这并不高效。我认为我在这里使用安全参数做错了什么?

有人可以帮我吗。我实在想不通这个。谢谢

0 投票
1 回答
247 浏览

android - 如何将 SafeArgs 与在导航图中多次出现的目的地一起使用?

我使用 SafeArgs 很好地设置了我的应用程序的主导航。这是我的nav_graph.xml

而且,使用 SafeArgs,我可以愉快地使用以下命令从Fragment2导航到Fragment3

但是,我随后需要从通知中添加深度链接功能(有一个带有参数的 backstack ,如此处所述),所以我在nav_graph.xml<navigation />的末尾添加了一个子元素——它变成了:

请注意,该文件现在包含两次出现的org.example.Fragment2.

这给我带来了一个新问题,即第二次出现org.example.Fragment2(即fragment2Notif)导致原来的Fragment2Directions.fragment2ToFragment3(...)方法不再可用。

它已被替换为Fragment2Directions.fragment2NotifToFragment3Notif(...)在我的应用程序的通知部分中可以正常工作,但是当从我的应用程序的主要部分调用时,如预期的那样,会导致:

IllegalArgumentException:导航目的地 org.example:id/fragment2Notif_to_fragment3Notif 对此 NavController 未知

似乎 SafeArgs 已经覆盖了第一个Fragment2Directions对象,这意味着它拥有的唯一方法是fragment2NotifToFragment3Notif(...).

那么,如何fragment2ToFragment3(...)恢复旧方法呢?

我希望我可以通过将 Fragment2 子类化以使用不同的名称 Fragment2Notif 有效地复制它,然后在我的主导航中使用 Fragment2 并在子导航中使用 Fragment2Notif 来解决问题但是有更优雅/首选的方式吗?

0 投票
1 回答
916 浏览

android - Android 通过 NavDirections 争论(Safe-Args)将 ViewModel 发送到 Fragment

我有一个具有以下架构的应用程序:

  • Navigator是一个自定义类,它包含NavController
  • Cooridnator持有Navigator
  • Cooridnator告诉Navigator“启动”framgent并将其传递ViewModel给它
  • Navigator要求NavController导航到 aNavDirections并提供所需的参数(使用 Safe-Args)

现在这里的问题是,如果我想发送ViewModelas 参数,它需要是 Parcelable 以及它的所有底层类(这将使我的大部分代码 Parcelable,这并不是真正需要的)。

那么有没有办法做到这一点而不使一切 Parcelable 或使用 Dagger ?(不喜欢 Dagger,因为它给代码增加了太多的复杂性......)

我可以lateinit在 Fragment 中有一个字段并手动设置它,但似乎无法访问 FragmentNavDirections

关于我如何做到这一点的任何想法?

0 投票
3 回答
2007 浏览

android - Android navArgs 背面清晰

有没有办法在使用 navArgs 后清除它们?我有片段 A 用 navArgs 打开片段 B,然后我导航到片段 C 并且用户按下回,所以片段 B 用相同的 navArgs 打开,我不希望这样。

有没有办法在没有 navArgs 的情况下导航回片段 B?

谢谢。

0 投票
1 回答
684 浏览

android - 使用捆绑从一个图的片段导航到另一个图的片段

我有两个图表 nav_graph1.xml 和 nav_graph2.xml(在两个不同的模块/库中)

我想使用 bundles从 fragment1 导航到 fragment2 。如何使用导航组件实现?

nav_graph1.xml

nav_graph2.xml

在此处输入图像描述

提前致谢,

0 投票
1 回答
64 浏览

android - 是否可以在某些情况下不通过 safeArgs

我正在开发一个必须实现添加和编辑功能的应用程序。我正在使用一个片段,我正在向该片段传递一个安全参数,当我传递参数时它在编辑模式下工作正常,但它在添加模式下崩溃,因为这次我没有传递任何参数。是否可以不根据条件传递参数?

0 投票
2 回答
1378 浏览

android - 片段参数为 null 使用 launchFragmentInContainer

我正在为使用safeArgsand的片段编写测试FragmentScenario,但是当我launchFragmentInContainer()使用fragmentArgs参数调用时,我得到一个异常,说参数为空。生产代码没有问题。

我的导航图:

我的测试:

当我尝试运行测试时,我得到

完整的堆栈跟踪:

编辑:

的 idList1不为 null,因为它是在构造函数中初始化的。

0 投票
1 回答
1209 浏览

android - 在 Fragment 之间共享数据的更好方法是什么?

我想从一个片段到另一个片段共享一些整数值。我不想在设备更改配置时丢失数据。

因此,我遇到并想知道哪一种更适合我的用例的两种方法是:

ViewModel1.在多个分片之间共享a

2. 结合使用 SafeArgs 和自定义ViewModelProvider.Factory

使用 SafeArgs 将数据作为参数传递给从片段(例如 A)到另一个片段(例如 B)的导航操作。片段 B 的实现ViewModel(参数化)和ViewModelFactory类。将数据从 SafeArgs 传递到 ViewModelFactory 以创建 ViewModel(使用ViewModelProvider

像这样的东西: