标签: android-safe-args

Unable to load class AndroidComponentsExtension after upgrading the Android Gradle Plugin 7.1

I recently downloaded Android Studio Bumblebee and it helpfully asked whether I wanted to upgrade to Android Gradle Plugin 7.1.0, the version that shipped alongside Android Studio Bumblebee.

After upgrading, I get a build error:

Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'.

This is an unexpected error. Please file a bug containing the idea.log file.
Run Code Online (Sandbox Code Playgroud)

And looking at the idea.log file, I see:

A problem occurred evaluating project ':main'.
    at org.gradle.initialization.exception.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:103)
    ...
Caused by: org.gradle.api.GradleScriptException: A problem occurred evaluating project ':main'.
    at …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin firebase-performance android-architecture-navigation android-safe-args

150
推荐指数
4
解决办法
6万
查看次数

Android 导航组件:BottomNavigationView 的选定选项卡图标未更新

我正在BottomNavigationView与导航组件一起使用。当显示片段不是根片段时,选项卡图标不会更新(选择)。

示例:
当我在带有片段 A(也是根片段)的Tab Home和带有片段 B(也是根片段)的Tab Star之间切换时,它工作正常。
但是,当我从Tab Home导航到另一个片段(例如片段 A2),然后点击Tab Star并再次返回Tab Home时,仍然在 中选择Tab StarBottomNavigationView

Android 导航组件错误

版本运行良好2.4.0-alpha05,当我将其更新到2.5.0-alpha01.

构建.gradle(应用程序)

implementation "androidx.navigation:navigation-fragment-ktx:2.5.0-alpha01"
implementation "androidx.navigation:navigation-ui-ktx:2.5.0-alpha01"
implementation "androidx.navigation:navigation-dynamic-features-fragment:2.5.0-alpha01"
Run Code Online (Sandbox Code Playgroud)

构建.gradle(根)

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.5.0-alpha01"
Run Code Online (Sandbox Code Playgroud)

图形:
Android 导航图

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/graph"
        app:startDestination="@id/fragmentA">
    <fragment
            android:id="@+id/fragmentA"
            android:name="ui.test.FragmentA"
            tools:layout="@layout/fragment_test"
            android:label="FragmentA" >
        <action
                android:id="@+id/action_fragmentA_to_fragmentA2"
                app:destination="@id/fragmentA2" />
    </fragment>
    <fragment
            android:id="@+id/fragmentA2"
            android:name="ui.test.FragmentA2"
            tools:layout="@layout/fragment_test"
            android:label="FragmentA2" />
    <fragment
            android:id="@+id/fragmentB"
            android:name="ui.test.FragmentB"
            tools:layout="@layout/fragment_test"
            android:label="FragmentB" />
</navigation>
Run Code Online (Sandbox Code Playgroud)

菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> …
Run Code Online (Sandbox Code Playgroud)

navigation android bottomnavigationview android-safe-args

18
推荐指数
2
解决办法
3644
查看次数

未解析的参考:将一些参数添加到目的地后的 NavArgs

我正在做一个小项目并尝试使用新的导航架构组件。当我尝试向目的地添加一些参数时,出现“未解析的引用:NavArgs”错误。

我遵循了本指南https://developer.android.com/topic/libraries/architecture/navigation/navigation-pass-data#kotlin 并已添加

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha11"

到我的项目gradle文件并添加

apply plugin: 'androidx.navigation.safeargs.kotlin'

到我的应用程序 gradle 文件。

如上面的指南所示,我想用它val args: AddKittenFragmentArgs by navArgs()来获取传递的参数。但navArgs()不被认可。

同样NavArgs在生成的代码中没有解决。

data class MyFragmentArgs(val argOne: String? = "\"\"", val argTwo: String? = "\"\"") : NavArgs
Run Code Online (Sandbox Code Playgroud)

navigation android android-architecture-components android-safe-args

16
推荐指数
4
解决办法
1万
查看次数

启用安全参数插件后无法从数据绑定获取根视图

我正在使用 dataBinding 开发一个 Android 应用程序,目前正在尝试添加安全参数插件,但在启用插件后,我无法再通过 binding.root 获取根视图 - Android Studio 给出错误:

Unresolved Reference
None of the following candidates is applicable because of a receiver type mismatch:
* internal val File.root: File defined in kotlin.io
Run Code Online (Sandbox Code Playgroud)

我怎样才能让数据绑定和安全参数一起玩得很好?

请注意,虽然代码片段在 Kotlin 中,但我很乐意接受 Java 答案。在 Java 中不太舒服,但我可以轻松阅读和翻译它。

通过谷歌搜索错误消息和“安全参数”,我无法找到其他有同样问题的人。我首先尝试使用 Android 文档中列出的类路径:https : //developer.android.com/guide/navigation/navigation-pass-data

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0"
Run Code Online (Sandbox Code Playgroud)

然后还找到了一个教程,建议我使用:

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha07"
Run Code Online (Sandbox Code Playgroud)

两者都有相同的问题:binding.root 在插件激活时出错

这是我的片段的 onCreateView() 。当安全参数未启用时,该返回行正常工作,并且在启用时不起作用

   override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    binding = DataBindingUtil.inflate(inflater, R.layout.fragment_encoder, container, false)

    return binding.root
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助解决或理解这个问题!

android kotlin android-databinding android-safe-args

15
推荐指数
2
解决办法
3622
查看次数

Parcelables 不支持默认值。Android 导航深层链接参数

在实现传参方案的过程中,在模块间的导航中,遇到了序列化错误。据我所知,Deeplinks 接受自定义参数类型,即 Parcelables 或 Serializable。

我使用的是最新版本的导航 2.2.0

错误信息:

java.lang.UnsupportedOperationException:Parcelables 不支持默认值。

我做错了什么还是仍在开发中?

这是一个简短的例子:

<fragment
    android:id="@+id/sampleFragment"
    android:name="com.testapp.app.samples.navigation.SampleFragment"
    android:label="SampleFragment">
    <argument
        android:name="Args"
        app:argType="com.testapp.navigation.SampleArgs" />
    <deepLink app:uri="app://app/samples/navigation/SampleFragment?Args={Args}"/>
</fragment>
Run Code Online (Sandbox Code Playgroud)
@Parcelize
@Keep data class SampleArgs(
    val text: String
) : NavArgs, Parcelable
Run Code Online (Sandbox Code Playgroud)
val x = SampleArgs("TEST")
val uri = Uri.parse("app://app/samples/navigation/SampleFragment?Args=$x")
navController.navigate(uri)
Run Code Online (Sandbox Code Playgroud)

我在这里发现了类似的东西Android Parcelable 不支持默认值 App Crash

这是我在堆栈上的第一篇文章,所以请保持温柔:)

编辑

这是答案:

https://issuetracker.google.com/issues/148523779

navigation android parcelable deeplink android-safe-args

15
推荐指数
1
解决办法
1076
查看次数

如何从 SafeArgs 中的资源获取默认字符串值?

我只是在学习 Android NavigationUI,并尝试使用 Safe Args 中的字符串默认值设置工具栏标题。但是有一些问题。

“字符串资源”文件:

    <string name="title_add_item">Add new items</string>
Run Code Online (Sandbox Code Playgroud)

导航图文件。将标签设置为Title: {title}参数。

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/mainFragment">

<fragment
    android:id="@+id/addNewItemFragment"
    android:name="com.myapplication.AddNewItemFragment"
    android:label="Title: {title}"
    tools:layout="@layout/fragment_add_new_item" >
    <argument
        android:name="title"
        app:argType="string"
        android:defaultValue="@string/title_add_item" />
</fragment>
<fragment
    android:id="@+id/mainFragment"
    android:name="com.myapplication.MainFragment"
    android:label="fragment_main"
    tools:layout="@layout/fragment_main" >
    <action
        android:id="@+id/action_to_add_items_fragment"
        app:destination="@id/addNewItemFragment" />
</fragment>
Run Code Online (Sandbox Code Playgroud)

如果{app:argType="string"}我遇到错误:

 Caused by: org.xmlpull.v1.XmlPullParserException: unsupported value 'Add new items' for string. You must use a "reference" type to reference other resources.
Run Code Online (Sandbox Code Playgroud)

如果 {app:argType="reference"}应用程序有效,但我在标题中有一个数字(我认为这是一个资源 ID):

在此处输入图片说明

当然,我可以通过从参数中获取它来分配代码中工具栏标题的值。但是是否可以更改此代码以便正确填写标题?

string android android-navigation androidx android-safe-args

13
推荐指数
1
解决办法
1441
查看次数

如何使用 Safe Args 传递通用数据类型?

我需要将 KotlinPair作为参数传递。


<argument android:name="data" app:argType="kotlin.Pair" />
Run Code Online (Sandbox Code Playgroud)
e: CreateCodeFragmentDirections.kt: (16, 15): 2 type arguments expected for class Pair<out A, out B>
Run Code Online (Sandbox Code Playgroud)
<argument android:name="data" app:argType="kotlin.Pair<String, String>" />
Run Code Online (Sandbox Code Playgroud)
Cause: markup not allowed inside attribute value - illegal <  (position: TEXT seen ...<argument android:name="data" app:argType="kotlin.Pair<... @132:30) 
Run Code Online (Sandbox Code Playgroud)
<argument android:name="data" app:argType="kotlin.Pair&lt;String, String&gt;" />
Run Code Online (Sandbox Code Playgroud)
Can't escape identifier `Pair<String, String>` because it contains illegal characters: <>
Run Code Online (Sandbox Code Playgroud)

上述尝试均无效。我该怎么做?

android android-safe-args

12
推荐指数
1
解决办法
437
查看次数

为什么 android studio 没有为所有安全参数生成代码?

我正在使用安全参数将参数从一个片段传递到另一个片段。Android studio 间歇性地生成带有所有参数的 fragmentArgs 类。

我尝试过并且确实有效的是更改导航图文件,制作项目,然后撤消这些更改,最后再次制作项目。

使用的依赖项:

项目模块:

ext.nav_version = '2.2.0-beta01'

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

应用模块:

apply plugin: "androidx.navigation.safeargs.kotlin"

    <fragment
            android:id="@+id/someFragment"
            android:name="package_name.SomeFragment"
            android:label="@string/some_fragment">
        <argument
                android:name="source"
                android:defaultValue="-1"
                app:argType="integer" />
        <argument
                android:name="nationalId"
                android:defaultValue="-1"
                app:argType="integer" />
        <argument
                android:name="hudumaNumber"
                android:defaultValue="-1"
                app:argType="string" />
        <argument
                android:name="middleName"
                android:defaultValue="None"
                app:argType="string" />

    </fragment>
Run Code Online (Sandbox Code Playgroud)

我希望所有参数都可以在生成的类中找到,但事实并非如此。

android kotlin android-safe-args

10
推荐指数
1
解决办法
4138
查看次数

Android 导航组件 - 无法使用 Extras 和 Safe Args

我正在使用带有 SafeArgs 的 Android 导航组件,并且我想向操作添加共享元素转换。根据文档,我应该能够简单地将 Extras 对象作为参数添加到navigate(),所以我尝试:

FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder()
                .addSharedElement(view, "group_transition")
                .build();
NavDirections action = HomeFragmentDirections.actionHomeFragmentToViewFragment(title);
Navigation.findNavController(view).navigate(action, extras);
Run Code Online (Sandbox Code Playgroud)

但是Android Studio给出了一个错误,并说它无法解析该方法。我尝试使用

.navigate(int resId, Bundle args, NavOptions navOptions, Navigator.Extras navigatorExtras)

这将问题缩小到Navigator.Extras. Android Studios 在该参数下给出了一个错误,告诉我:

必需类型:androidx.navigation.Navigator.Extras,
提供类型:androidx.navigation.fragment.FragmentNavigator.Extras”

我无法弄清楚。Navigator.Extras是一个接口,它FragmentNavigator.Extras 实现. 除了放弃我想要的转变之外,我还能做什么呢?

java android android-safe-args

10
推荐指数
0
解决办法
1275
查看次数

如何将 SafeArgs 添加到新的顶级 Kotlin gradle

我将使用带有片段的导航框架,但在依赖项步骤中,当我尝试从文档添加 SafeArgs 时,我发现新的顶级 gradle 文件与文档不同,因此我无法添加它。您能解释一下如何将 SafeArgs 添加到新的 kotlin 顶级 gradle 文件吗?

我的顶级 gradle 文件:

plugins {
id 'com.android.application' version '7.1.2' apply false
id 'com.android.library' version '7.1.2' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false} 


task clean(type: Delete) {
delete rootProject.buildDir}
Run Code Online (Sandbox Code Playgroud)

文档顶级 Gradle :

buildscript {
repositories {
    google()
}
dependencies {
    val nav_version = "2.4.1"
    classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
}}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

navigation gradle kotlin android-safe-args

9
推荐指数
2
解决办法
4323
查看次数