问题标签 [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 回答
950 浏览

android - 当我将相同的片段添加到第二个导航图时,不识别动作类

我需要将相同的片段添加到不同的导航图中。这是第一张图的一段代码(mobile_navigation

第二个导航图中的第二个代码片段 ( navigation_initial )

当我尝试 MakeProject 时,构建输出显示错误:

位置:类 FragmentContactanosClienteDirections

但是当我评论第二段代码(navigation_initial)时,问题就消失了。问题是我需要第二段代码,因为我需要调用片段并与它共享捆绑包、其他信息并显示不同的东西......如何实现这一点?

我还分享了图表的设计:

移动导航

mobile_navigation.xml(设计)

导航_初始

navigation_initial.xml(设计)

0 投票
2 回答
617 浏览

android - 如何使用 SafeArgs 进行导航

我刚开始在 Android 中使用 Jetpack Navigation 组件和 SafeArgs 进行导航。但是,我不明白如何从一个目的地导航到另一个目的地(我阅读了谷歌文档,但这让我感到困惑)。所以我有一个 Menu_Fragment 类,它在 NavGraph 中有一个指向 Softdrink 类的链接。自动创建了一个 Menu_FragmentDirections 类。但是,我不知道如何在 Menu_Fragment 类中使用它来实现 OnClick 侦听器事件。在这里,我在 Menu_Fragment 类中有 onClick 方法(请参阅https://developer.android.com/guide/navigation/navigation-navigate):

在这里您可以看到 Menu_FragmentDirections 类:

在这里你可以看到 NavGraph:

谁能告诉我,我必须在上面发布的 onCreateMethod() 中做什么。我收到错误消息:“无法解析符号‘操作’”和“无法解析符号‘导航’”(当然还有使用错误意外的标记 '...')

我会很感激每一条评论,并非常感谢您的帮助。

这里更新的是带有 onCreateMethod 的完整 Menu_Fragment 类:

0 投票
0 回答
562 浏览

android - 使用 android 导航 safeArgs 时的许多参数

我在 android 中创建导航图,并为目的地提供 args,但是当我调用该函数时,它说的参数太多。

  • 已经在 build.gradle (app) 上设置apply plugin: 'androidx.navigation.safeargs'

  • 已经在 build.gradle (.) dependecies { classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha05" }

  • 这是我的导航来源

  • 这是我导航的目的地
  • 这是我的导航源的 kotlin 代码

当我在未使用的 gameFinished 函数中调用它时,GameFragmentDirections.actionGameFragmentDestinationToScoreFragment(score) 它对很多参数说,知道如何解决吗?

0 投票
2 回答
195 浏览

android - 使用可为空的 parcelable 参数编译时出现 Android 数据绑定错误

我想通过Payment安全参数将我创建的 Parcelable 类从一个片段传递到另一个片段,但它可以为空。

我创建了类型的参数com.example.Payment并使其可以为空。当我编译应用程序时,我在 build 文件夹下收到一条错误Expression in a class literal has a nullable type 'Payment?', use !! to make the type non-nullable消息FragmentDirection

错误发生在这一行:

我不知道我做错了什么并且无法编辑文件,因为它在 build 文件夹下。

编辑:有导航的xml代码:

0 投票
1 回答
383 浏览

android - generateSafeArgsDebug 任务执行时出错,XmlPullParserException 只允许空白内容

我有一个项目,其中包含三个导航图 xml 文件,然后我从文件资源管理器窗口中删除了一个文件,之后我在构建项目时遇到了问题。

然后我恢复了删除的文件,但有同样的问题,也尝试清理项目并使缓存/重启选项无效几次,但没有运气

0 投票
1 回答
46 浏览

java - 使用 Android Safe Args 时类和包冲突

我正在努力解决 Android (Java) 中的 Safe Args 的一个非常烦人的问题。

我有一个这样的项目结构:

这里重要的部分是com.myapp.activities.ActivityA包。

当向导航图添加一些导航路径时,Safe Args 会生成如下结构:

在这种情况下,我无法编译我的项目,因为我得到了错误

错误:ActivityA 类与同名包冲突。

这对我来说完全有意义,因为类com.myapp.activities.ActivityA被生成以打包com.myapp.activities.ActivityA但不知何故我不明白我应该如何避免这个问题。我的文件夹结构有什么完全错误的吗?

0 投票
0 回答
46 浏览

android - 创建一个表单,您可以在其中拥有多个子片段,这些子片段将数据发送回 Kotlin 主片段

我是 kotlin 的新手,我很难在我的应用程序中创建一个表单。该表单使用一个主片段,您可以在其中单击不同的属性,然后在其中打开一个新片段,您可以在其中插入数据。当您完成子片段中的数据填写后,我想回到主片段。我已经设法使用界面和导航组件/安全参数在它们之间传递数据,并且我在活动中使用模型视图来保存不同的片段来管理数据。就我而言,我的代码已经变成了意大利面条代码,并且有些东西告诉我我做得不对。创建一个表单的最佳方法是什么,您可以有几个子片段将数据发送回主片段,而主片段保留数据?

如果有人能指出我正确的方向,我将不胜感激。

0 投票
1 回答
798 浏览

android - Android: Fragment has null arguments when getting global nested safeargs

I am trying to get my safeargs within the second fragment (calibrateRepairOptionFragment) of my nested_graph, The problem is that I get the above written error Fragment CalibrateRepairOptionFragment{5e1268d} (c7c2906d-5a17-4d22-b41d-eefe8eee059f) id=0x7f09012d} has null arguments.

I am confused because when I try to get my safeargs in the first fragment (CalibrateRepairMessageFragment), everything works and the toolbar_title is not null.

BaseFragment (getting safeargs here)

First Fragment (no error here, toolbar is set correctly)

Second Fragment (getting error here, toolbar.title is null)

nav_main.xml

Full Stracktrace

0 投票
0 回答
538 浏览

android - 通过 Safe Args 将数据传回之前的 Fragment。这怎么可能?

在我的应用程序中,我有一个 Activity,其余的是片段。现在我正在尝试按如下方式运行。假设我有片段 A(家庭)、B 和 C。场景是这样的:

我从 A 导航到 B,它显示了我通过 Safe args 从 A 传递的一些数据。然后我从 B 导航到 C 以编辑 B 中显示的数据。然后我从 C 回到 B 并且 B 向我显示 C 中编辑的数据。最后,我回到家。就这样。

我通过 Safe args 传递数据,但问题是,当我从 C 回到 B 时,我无法导航回 A,因为这navigateUp()将我带回 C 而不是去 A。

导航方法:

  • 从 A 到 B:Navigation.findNavController(requireActivity(), R.id.nav_host_fragment).navController().navigate(HomeFragmentDirections.actionNavHomeToNavB(some_string_data))
  • 从 B 到 C:Navigation.findNavController(requireActivity(), R.id.nav_host_fragment).navController().navigate(BFragmentDirections.actionNavBToNavC(string_data_in_B))
  • 从 C 到 B:Navigation.findNavController(requireActivity(), R.id.nav_host_fragment).navController().navigate(CFragmentDirections.actionNavCToNavB(edited_string_data_from_B))
  • 从 B 到 A:Navigation.findNavController(requireActivity(), R.id.nav_host_fragment).navController().navigateUp()

我还尝试navigateUp()在返回 B 之前使用,这会引发目的地不存在的异常,并且我尝试使用popBackStack()从堆栈中取出 C,以便navigateUp()B 中的可以将我带回主页。还没有成功。

0 投票
2 回答
469 浏览

android - 更新基本导航抽屉活动的参数

上下文: 我想在他登录后将 userId 传递给片段 UserFragment。我使用一个新的项目 Android 类型“导航抽屉活动”。我使用 LiveData,所以当用户登录时,我的 livedata 的观察者会从 MainActivity 更新 idUser。我还想更新导航组件中的片段参数...

我的问题:我只是想在导航时将 userId 的值作为目标(UserDetails 片段)的参数传递......但我不想创建一个 onClickListner 并在包中传递参数。我只想使用导航组件解决方案,因此只需更改在我添加到项目“安全参数”的导航组件中声明的片段的参数值。我在其中一个目标片段上添加了“theUserId”参数:

在 mobile_navigation.xml 中:

在 UserFragment.kt 中:

我尝试了什么:

我在 MainActivity.kt 的 onCreate() 中的 LiveData 观察者是:

我试图在我的 LiveData Observer 中添加一个 addOnDestinationChangedListner(但它会增加 Listner)。我还尝试直接在我的 MainActivity 的 OnCreate 中放置观察者(似乎更好):

...但是只有在第二次单击我的 UserDetail 片段的导航项后才会更新 userId 值。我不明白为什么。

我认为这段代码最好放在我的 Livedata 观察者中:

...但我不知道如何处理 myArgs ...如何使用它,如何将其注入到导航组件中,以便下次单击抽屉项“详细用户”时,我的参数“ theUserId" 在片段 UserFragment 中被很好地修改和检索。

谢谢您的帮助。