我正在将Safe Args插件与Android项目的新导航组件一起使用。现在,我有一个参数是可包裹物的数组列表,是否可以将其与Safe Args插件一起使用?
类似app:argType=ParcelableArray
。这应该是可能的,因为有putParcelableArrayList()
之类的捆绑方法。
答案 0 :(得分:6)
是的,从1.0.0-alpha08版本开始,您现在可以像这样传递可包裹对象的数组:
<argument
android:name="users"
app:argType="com.navigation.test.User[]"/>
用于传递基本类型的数组,例如用于app:argType="integer[]"
答案 1 :(得分:3)
目前,我不认为有一种简单的方法可以使用带有安全参数的包裹清单, 但是我发现了一些“技巧”来使这项工作有效。 例如,我有一个对象“ User”,并且它是可拆分的,我声明了一个扩展ArrayList()的新的可拆分对象“ Users”。
@Parcelize
data class User(var name: String, val age: Int): Parcelable
@Parcelize
class Users: ArrayList<User>(), Parcelable
现在我可以在导航中将“用户”设置为参数
<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}"
更新:
支持alpha8中的对象列表: https://issuetracker.google.com/issues/111487504
答案 2 :(得分:0)