问题标签 [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.
android - 在 safeArgs 中将 ArrayList 作为参数传递
我试图ArrayList<String>
在使用 safeArgs 时将 an 作为参数传递。但是当我从可序列化和构建列表中选择 ArrayList 时,它会抛出这些异常
我知道我必须为 ArrayList 设置 dataType,但在从导航图屏幕设置 safeArgs 时,我无法执行此操作,也没有选项。
在导航图 XML 中,代码生成为
有没有办法在导航图的 XML 中声明数据类型?
android - 如何在使用导航组件和 safeArgs 从回收器视图导航到片段时添加共享元素转换?
我想显示从我的回收器视图到片段类的共享元素转换,我编写了以下代码:
它在 .navigate 处显示错误:
在片段类中,我正在使用:
似乎 safeArgs 不允许显示转换。我是 Android 新手,很难理解过渡和动画。请帮帮我,我在这里卡了这么多天了
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
下面是该问题的演示:
我尝试了一种快速破解方法,我保存了一个未修改的帐户对象的实例,在用户离开片段之前,我通过分配每个变量来重置更改,但这并不高效。我认为我在这里使用安全参数做错了什么?
有人可以帮我吗。我实在想不通这个。谢谢
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 来解决问题,但是有更优雅/首选的方式吗?
android - Android 通过 NavDirections 争论(Safe-Args)将 ViewModel 发送到 Fragment
我有一个具有以下架构的应用程序:
Navigator
是一个自定义类,它包含NavController
Cooridnator
持有Navigator
Cooridnator
告诉Navigator
“启动”framgent并将其传递ViewModel
给它Navigator
要求NavController
导航到 aNavDirections
并提供所需的参数(使用 Safe-Args)
现在这里的问题是,如果我想发送ViewModel
as 参数,它需要是 Parcelable 以及它的所有底层类(这将使我的大部分代码 Parcelable,这并不是真正需要的)。
那么有没有办法做到这一点而不使一切 Parcelable 或使用 Dagger ?(不喜欢 Dagger,因为它给代码增加了太多的复杂性......)
我可以lateinit
在 Fragment 中有一个字段并手动设置它,但似乎无法访问 FragmentNavDirections
关于我如何做到这一点的任何想法?
android - Android navArgs 背面清晰
有没有办法在使用 navArgs 后清除它们?我有片段 A 用 navArgs 打开片段 B,然后我导航到片段 C 并且用户按下回,所以片段 B 用相同的 navArgs 打开,我不希望这样。
有没有办法在没有 navArgs 的情况下导航回片段 B?
谢谢。
android - 是否可以在某些情况下不通过 safeArgs
我正在开发一个必须实现添加和编辑功能的应用程序。我正在使用一个片段,我正在向该片段传递一个安全参数,当我传递参数时它在编辑模式下工作正常,但它在添加模式下崩溃,因为这次我没有传递任何参数。是否可以不根据条件传递参数?
android - 片段参数为 null 使用 launchFragmentInContainer
我正在为使用safeArgs
and的片段编写测试FragmentScenario
,但是当我launchFragmentInContainer()
使用fragmentArgs
参数调用时,我得到一个异常,说参数为空。生产代码没有问题。
我的导航图:
我的测试:
当我尝试运行测试时,我得到
完整的堆栈跟踪:
编辑:
的 idList1
不为 null,因为它是在构造函数中初始化的。
android - 在 Fragment 之间共享数据的更好方法是什么?
我想从一个片段到另一个片段共享一些整数值。我不想在设备更改配置时丢失数据。
因此,我遇到并想知道哪一种更适合我的用例的两种方法是:
ViewModel
1.在多个分片之间共享a
2. 结合使用 SafeArgs 和自定义ViewModelProvider.Factory
使用 SafeArgs 将数据作为参数传递给从片段(例如 A)到另一个片段(例如 B)的导航操作。片段 B 的实现ViewModel
(参数化)和ViewModelFactory
类。将数据从 SafeArgs 传递到 ViewModelFactory 以创建 ViewModel(使用ViewModelProvider
)
像这样的东西: