Androidプロジェクトの新しいナビゲーションコンポーネントでSafe Argsプラグインを使用しています。これで、パーセルの配列リストである引数があります。これをSafe Argsで使用する方法はありますか?プラグイン?
_app:argType=ParcelableArray
_のようなもの。 putParcelableArrayList()
のようなバンドルメソッドがあるため、これは可能です。
現在、安全な引数を持つパーセルのリストを使用する簡単な方法はないと思いますが、これを機能させるための「ハック」を見つけました。たとえば、私はオブジェクト '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
はい、バージョン1.0.0-alpha08以降、次のようなパーセル可能なオブジェクトの配列を渡すことができます。
<argument
Android:name="users"
app:argType="com.navigation.test.User[]"/>
プリミティブ型の配列を渡すには、たとえばapp:argType="integer[]"