![見出し画像](https://assets.st-note.com/production/uploads/images/15101124/rectangle_large_type_2_c351246a61949f11b5aa4a9982dfbccc.png?width=1200)
[Android] ViewModel-SavedState-ktx 1.0.0-beta01 をリリースしました
# ViewModel-SavedState-ktx とは
ViewModel-SavedState の SavedStateHandle を隠蔽して Delegated Property で簡単に扱えるようにするライブラリです。
# ViewModel-SavedState-ktx について
# ViewModel-SavedState-ktx 1.0.0-beta01 について
## ライブラリ更新
- `androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01`
## enum サポート
Activity の Intent や Fragment の Bundle に enum を渡して ViewModel で参照できるようになりました。以下のように拡張関数で Intent や Bundle に enum を渡すことができます。
// Intent
intent.putExtraEnum("key", YourEnum.ENUM_VALUE)
// Bundle
bundle.putEnum("key", YourEnum.ENUM_VALUE)
ViewModel では以下のように enum を参照できます。
class YourViewModel(
savedStateHandle: SavedStateHandle
) : SavedStateViewModel(savedStateHandle) {
// Property
var yourEnum: YourEnum by savedStateProperty("key")
// LiveData
val yourEnumLiveData: MutableLiveData<YourEnum> by savedStateLiveData("key")
}
## カスタムデリゲートをサポート
シリアライズ/デシリアライズを設定でき、任意の型を保存/復元できます。
class YourViewModel(
savedStateHandle: SavedStateHandle
) : SavedStateViewModel(savedStateHandle) {
// Property
var yourClass: YourClass by savedStateProperty<String, YourClass>({
Json.parse(YourClass.serializer(), it)
}, {
Json.stringify(YourClass.serializer(), it)
}, "key")
// LiveData
val yourClass: MutableLiveData<YourClass> by savedStateLiveData<String, YourClass>({
Json.parse(YourClass.serializer(), it)
}, {
Json.stringify(YourClass.serializer(), it)
}, "key")
}