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

android - 使用具有相同名称引用的 NavigationComponent 和 SafeArgs 从 Activity 向 Fragment 发送参数

我在这里有一个案例,我必须从活动中打开一个片段,我有时会这样做,但这里的问题是我想打开与之有争议的片段。

我所知道的是我可以打开一个片段(来自活动)并像这样传递它的参数:

问题在这里“productId” 如果另一个开发人员从navigation.xml文件更改该名称怎么办,所以这根本不是最佳实践

我想对该参数名称进行相同的引用。

或者,如果有另一种解决方案?

0 投票
0 回答
116 浏览

android - 喷气背包导航上的 NoSuchMethodError (safeargs)


尝试生成导航操作(由 safeargs gradle 插件生成)时遇到错误。源片段和目标片段都是bottomsheetdialogfragments,因此在相应的导航图中注册为对话框。

导航本身看起来像这样

这会导致运行时异常:

0 投票
1 回答
153 浏览

android - Android:使用 BottomNavigationView、NavController 和 SafeArgs 恢复片段

我目前正在开发一个 Android 应用程序,遇到了有关 BottomNavigationView 和 Fragments 的问题。我知道,有类似我的问题,但要么他们没有解决我的问题,要么他们没有有效的答案。

我的应用由五个顶级目的地片段组成。为了在它们之间导航,我使用了 BottomNavigationView。此外,我有几个片段用作较低级别的目的地,将从顶级片段之一调用。我使用 SafeArgs 插件导航到这些片段并将数据传递给。

我的 BottomNavigationView 配置如下所示:

这种用法的问题在于,BottomNavigationView 似乎没有提供对在某处保存和存储片段以及重用这些实例进行导航的支持。它只是创建一个新实例并显示它。

目前每个片段都包含一些数据获取代码,例如在协程中运行网络请求或从文件系统加载文件。而且由于 BottomNavigationView 不保留片段实例,因此这些数据获取部分运行得太频繁了。
当然,我考虑过将数据获取过程放入主活动中,但这会导致应用程序启动速度整体变慢,并且不能解决每次用户在片段之间导航时仍需要重新创建片段的问题。

到目前为止,我已经找到了一半的解决方案。通过使用 SupportFragmentManager,手动添加、显示和隐藏我的片段可以正常工作。但是该应用程序运行速度明显变慢,并且使用 SafeArgs 导航到我的较低级别目的地不再起作用。我使用 SafeArgs 是因为它易于使用且非常轻松,而且我想继续使用它。

我尝试使用 SupportFragmentManager 手动管理这一切,但最终导致混乱和更差的性能。

有什么方法可以解决我的问题吗?一种方式,BottomNavigationView 可以与 SafeArgs 和 SupportFragmentManager 交互以重用片段,而不是在每个导航操作上重新创建它们?

(如果您需要更多信息或我的部分代码,请询问。我认为在这里发布我的完整代码没有多大意义。)

0 投票
1 回答
81 浏览

android-safe-args - 在多模块项目中移动 SafeArgs

我正在研究模块化android项目。

我正在使用导航组件库。

我在 :app 模块中有主要的 nav_graph.xml。

我想将生成的 SafeArgs 文件移动到模块目录。

我没有androidx.navigation.safeargs.kotlin向模块添加插件,除了 :app 模块。

generateSafeArgs任务完成后,我已经通过 gradle 脚本将一个测试生成的 args 文件移动到排序模块中。但我的 IDE 无法在代码中看到它。大家都知道为什么 IDE 看不到我移动的文件吗?

0 投票
2 回答
855 浏览

android - 在 Android Studio 中使用 safeArgs 导致错误,我无法构建项目

我正在尝试在 Kotlin 中构建我的项目,但出现此错误:

任务 ':app:generateSafeArgsDebug' 执行失败。

无法读取“F:\Program Files\Android Projects\CityOnApp\crowdapps-mobile-android\app\build\intermediates\metadata_application_id\debug\application-id.txt”,因为它不存在。

当我在 Settings > Build, Execution, Deployment > Compiler > Command Line Options 中添加:--stacktrace --debug -Pandroid.debug.obsoleteApi=true,然后我得到:[ERROR] [org.gradle.internal.buildevents. BuildExceptionReporter] 任务 ':app:generateSafeArgsDebug' 执行失败。

无法读取“F:\Program Files\Android Projects\CityOnApp\crowdapps-mobile-android\app\build\intermediates\metadata_application_id\debug\application-id.txt”,因为它不存在。

我检查了路径,文件在那里不存在!我在 Kotlin 和 Android Studio 中有最新版本。我试过但没有奏效的是:

  • 清洁构建和重建/构建
  • 降级 Android Studio 版本
  • 从根目录中删除 .gradle 文件
0 投票
0 回答
51 浏览

android - 我们如何在多模块项目中使用 globalAction 传递 safeArgs?

我有一个多模块项目,其功能方面的 nav_graph 分组在一个主 nav_graph 文件下,如下所示:

  • 导航主
    • 导航登录
    • 导航仪表板
    • nav_profile

每个图都有自己的模块,主app模块依赖于所有功能模块来创建上面的图。

现在我的问题是,如何使用 safeargs 将数据从一个图形传递到另一个图形

任何帮助,将不胜感激

0 投票
0 回答
12 浏览

android-viewmodel - 当 Safe Args 从 FirstFragment 接收到 args 时,如何将 args 从 SecondFragment 发送到 SecondViewMode?

我使用Safe ArgsandLiveData将 args 从FirstFragment.classto 发送到SecondFragment.class.

但我需要 args in SecondViewModel.class,而不是 in SecondFragment.class

如何将 args 从SecondFragment.classto 发送到SecondViewModel.class

0 投票
0 回答
19 浏览

android-safe-args - 使用 Safe Args 时添加 android:defaultValue="@null" 后无法构建应用程序

我的应用程序首先加载MainFragment到 UI,当单击按钮时,转到NewCodeFragmentUI。

NewCodeFragmentUI 上,当单击另一个按钮时,返回UI,使用MainFragment名为newCodeSafe Args的 arg 。

我的问题是当我运行该应用程序时,出现如下错误:

错误行:

日志信息:

所以我添加android:defaultValue="@null"如下:

但我现在无法构建我的应用程序。

问题出在哪里以及如何解决?我想将newCode从发送NewCodeFragmentMainFragment

错误行:(删除“newCode”,错误消失)

“构建”信息:

0 投票
2 回答
417 浏览

android - 我无法设置 Safe Args 默认值

我有一个String类型 arg 从NewCodeFragmentto发送MainFragment

如果我设置了一个默认值,那么我会得到一个“参数太多”的错误。

如何设置默认值?我的理解是,如果我发送一个 arg,那么目标片段将接收 arg,否则它将接收默认值。错误的?

问题代码:

navigationXML:

fragment.class

没有问题的代码:

navigationXML:

fragment.class

另一个没问题的代码:

navigationXML:

fragment.class

0 投票
1 回答
394 浏览

android - fragmentDirections.action() 方法找不到在 nav_graph 上指定的参数

我正在尝试实现 Safe Args 插件,但我的自动生成的类/方法MainScreenFragmentDirections.actionMainScreenFragmentToNoteScreenFragment()似乎无法从 nav_graph 中找到指定的参数。我认为问题不在于插件没有生成类,因为我能够引用必要的类和方法 - 我的问题是操作方法无法识别我的论点并给我一个警告:

Too many arguments for public final fun actionMainScreenFragmentToNoteScreenFragment(): NavDirections defined in com.example.notelite.ui.mainscreen.MainScreenFragmentDirections

我已经在 gradle 上应用了所有必要的插件和依赖项。

这是我的 nav_graph 代码:

这是我试图调用该方法的代码片段 - 只是定义一个导航操作并尝试传递一个参数参数:

“noteid”是 Room 数据库表中项目的键值。我已经相应地指定了类型。有任何想法吗?找不到有类似问题的人。我试过清理和重建,重新启动 Android Studio,更新一些插件,更新 IDE ......没有任何效果。有趣的是我似乎无法在 java(generated) 文件夹中找到生成的类,即使我可以在我的片段上引用它们——但这可能只是我是一个新手,只是真的没有找到它们