web-dev-qa-db-ja.com

Safe Args:区画のリストを使用

Androidプロジェクトの新しいナビゲーションコンポーネントでSafe Argsプラグインを使用しています。これで、パーセルの配列リストである引数があります。これをSafe Argsで使用する方法はありますか?プラグイン?

_app:argType=ParcelableArray_のようなもの。 putParcelableArrayList()のようなバンドルメソッドがあるため、これは可能です。

10
Dev Ste

現在、安全な引数を持つパーセルのリストを使用する簡単な方法はないと思いますが、これを機能させるための「ハック」を見つけました。たとえば、私はオブジェクト '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

4
Alex

はい、バージョン1.0.0-alpha08以降、次のようなパーセル可能なオブジェクトの配列を渡すことができます。

<argument
  Android:name="users"
  app:argType="com.navigation.test.User[]"/>

プリミティブ型の配列を渡すには、たとえばapp:argType="integer[]"

13
LaVepe

@LaVepe提案の改善:Android Studio 3.4.2の場合と同様に、選択した宛先の引数を指定することにより、ナビゲーションエディターの組み込み機能を使用してParcelable配列を渡すことができます。事前にコレクションにラップしてはならないカスタムのParcelableクラスを選択する:

Example

1
kkaun