2020/12/31 追記:
AndroidX Navigation SafeArgs 1.0.0-alpha08 からは、配列として引数を渡すことが可能になりました。
<argument
android:name="items"
app:argType="string[]"/>
プリミティブ型も Parcelable/Serializable もすべて上記の記述で Array となります。
Array として渡して、 受け取り側で List へ変換して使う形が良さそうです。
もともとのこの記事の方法で List を渡すこともできますが、 Parcelable な List に変換する手間がかかるため、Array を使う場合に比べて優位性はそこまでありません。
元記事:
AndroidX Navigation SafeArgs では List は引数として使えませんが、
Parcelable なクラスであれば使うことができます。
List を引数として使うときは @Parcelize
と組み合わせます。
Parcelize を使う設定
2020/12/31追記:
https://developer.android.com/kotlin/parcelize
https://developers-jp.googleblog.com/2020/11/the-future-of-kotlin-android-extensions.html
https://blog.jetbrains.com/ja/kotlin/2020/11/kotlin-1-4-20-released-ja/
Kotlin 1.4.20 からは Android Extensions は非推奨となり、 kotlin-parcelize プラグインを使うようになりました。
kotlin-parcelize を読み込めば使えるようになります。
build.gradle.kts
plugins {
..
id("kotlin-parcelize")
}
build.gradle.kts にて androidExtensions.experimental = true
の設定は不要です
引数クラスの定義
任意のパッケージで以下のような ArrayList を継承したクラスを定義します。
このクラスが Parcelable に対応します。
もちろん Hoge
クラスも Parcelable であることが前提です。
@Parcelize
class HogeList(val list: List<Hoge>) : ArrayList<Hoge>(list), Parcelable
Navigation XML の設定
argType
を指定します。
<activity
android:id="@+id/HogeActivity"
...
tools:layout="@layout/activity_hoge">
<argument
android:name="hoge"
app:argType="com.example.hoge.HogeActivity.HogeList"/>
引数の生成
引数を渡すときに、Parcelable なクラスに変換して、引数として使います。
HogeActivityArgs.Builder(HogeActivity.HogeList(list)).build()