【问题标题】:unchecked warnings - during compilation when used Safe Args to pass data未经检查的警告 - 在编译期间使用 Safe Args 传递数据
【发布时间】:2020-06-29 07:55:16
【问题描述】:

我使用导航组件的安全参数在目的地之间传递数据

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

MyType.kt

@Keep
@Parcelize
class MyType(
        val type: String,
        val name: String
) : Parcelable

nav_graph.xml

<action android:id="@+id/startMyFragment"
    app:destination="@+id/myFragment">
    <argument
        android:name="myArg"
        app:argType="com.myapp.MyType"
        app:nullable="false" />
</action>

上面的导航图在编译过程中会产生很多警告。有人可以建议如何避免这些警告

 where K,V are type-variables:
     K extends Object declared in class HashMap
     V extends Object declared in class HashMap
 /builds/my-app/app/build/generated/source/navigation-args/debug/com/myapp/MyType.java:19: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type HashMap
       this.arguments.put("myArg", myArg);

提前致谢

【问题讨论】:

  • 您可以在设置这些参数的位置添加代码 sn-p 吗?
  • 请查看上面的代码sn-p (nav_graph.xml)
  • 我的意思是你在哪里传递这些参数,即:Navigation.findNavController(view).navigate
  • val 方向 = MyDirection.actionStartMyFragment(label,detailArgs) Navigation.findNavController(view).navigate(directions)
  • 你在哪里打电话给setArgs(MyType())

标签: android bundle android-architecture-navigation android-jetpack-navigation


【解决方案1】:

在我的 Navgraph 中,参数不在操作中,这里每个 Fragment 将 Args 发送给另一个:

除了 safeargs 库,我还有这些:

def nav_version = '2.3.0'
    // Kotlin
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

导航图:

     <fragment
            android:id="@+id/fragmentX"
            android:name="package.FragmentX"
            android:label="Fragment 1">

        <argument
                android:name="userinput"
                app:argType="package.dataclasses.UserParcel"
                app:nullable="true"
                android:defaultValue="@null" />
        <action
                android:id="@+id/action_fragmentX_to_fragmentY"
                app:destination="@id/fragmentY"
               />
    </fragment>

    <fragment
                android:id="@+id/fragmentY"
                android:name="package.FragmentY"
                android:label="Fragment 2"
              >
          
            <argument
                    android:name="useripnut"
                    app:argType="package.dataclasses.UserParcel"
                app:nullable="true"
                android:defaultValue="@null" />
      
        <action
                android:id="@+id/action_fragmentY_to_fragmentX"
                app:destination="@id/fragmentX"  />
        
    </fragment>

如何获取 Fragment X 中的数据:

val args = FragmentXArgs.fromBundle(requireArguments())

如何将数据传递给片段 Y:

 val navController = activity?.findNavController(R.id.navHost)
                            navController?.navigate(FragmentXDirections.actionFragmentXToFragmentY(userParcel))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2021-02-03
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多