我正在为我的android项目使用safe args插件和新的导航组件。现在我有了一个参数,它是一个Parcelables数组列表,有没有办法在safe args插件中使用它?
类似于app:argType=ParcelableArray。这应该是可能的,因为有像putParcelableArrayList()这样的bundle方法。

最佳答案

目前,我认为没有一种简单的方法可以使用带有安全参数的包裹列表,
但我已经找到了一些“黑客”来让这个工作。
例如,我有一个对象'user',它是parcelable的,我正在声明一个新的parcelable对象'users',它扩展了arraylist()。

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

@Parcelize
class Users: ArrayList<User>(), Parcelable

现在我可以在导航中将“users”设置为参数
<argument
      android:name="users"
      app:argType="com.navigation.test.Users"/>

以及在目的地之间传递包裹数组列表:
 val user=User("Alex", 36)
 val users= Users()
 users.add(user)
 val action=MainFragmentDirections.actionMainFragmentToSecondFragment(users)
 NavHostFragment.findNavController(this@MainFragment).navigate(action)

要在其他目的地检索它们:
val users=SecondFragmentArgs.fromBundle(arguments).users
val user=users[0]
txtViewName.text=user.name
txtViewAge.text="${user.age}"

更新:
支持以字母8表示的对象列表:
https://issuetracker.google.com/issues/111487504

07-24 09:48
查看更多