首页 > 解决方案 > Android SafeArgs 数组不兼容

问题描述

我目前正在探索Android 导航,包括使用 SafeArgs,但我遇到了问题。

我尝试在导航上设置一个数组参数。

nav_graph.xml

<fragment android:id="@+id/firstFragment">
    <action android:id="@+id/action_firstFragment_to_secondFragment">
        <argument
            android:name="args"
            app:argType="CustomModel[]" />
    </action>
</fragment>

<fragment android:id="@+id/secondFragment">
    <argument
        android:name="args"
        app:argType="CustomModel[]" />
</fragment>

MainActivity.java

private List<CustomModel> dataList = new ArrayList<>();

private void getData() {
    // Some API calls
    dataList.clear();
    dataList.addAll(result.data);
}

private void navigateToNextFragment() {
    navHostController.navigate(
            FirstFragmentDirections.actionFirstFragmentToSecondFragment(dataList)
    );
}

错误是error: incompatible types: List<CustomModel> cannot be converted to CustomModel[]

任何帮助表示赞赏。谢谢!

标签: android

解决方案


你应该像这样定义你的模型:

@Parcelize
data class CustomModel(var name: String, val age: Int): Parcelable

@Parcelize
class CustomModels: ArrayList<CustomModel>(), Parcelable

并在 navgraph 中定义:

 <argument
  android:name="customModels"
  app:argType="com.test.test.CustomModels"/>

推荐阅读