見出し画像

[Android] View-SavedState-ktx 1.1.0-alpha01 をリリースしました

# View-SavedState-ktx とは

savedInstanceState での保存・復元を Delegated Properties で移譲できるライブラリです。savedInstanceState の記述が不要になります。

# View-SavedState-ktx は何が嬉しいのか

## savedInstanceState での保存・復元の記述が不要

これまで savedInstanceState での保存・復元が必要だった変数が、Kotlin の Delegated Properties で以下のように書くことができます。

class SampleActivity : AppCompatActivity(R.layout.sample_activity) {
  private val state by savedState()
  private var count by state.property<Int>(defaultValue = 0)
  private var text by state.property(
    { key -> getString(key, "default value") },
    { key, value -> putString(key, value) }
  )

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // You can use properties after onCreate
    count++
  }
}

savedInstanceState での保存・復元は by savedState() で移譲され、自動的に行われます。そのため、onSavedInstanceState() の呼び出しは不要になり、状態保存・復元用のキーの定数も不要になります。

## Intent や Arguments の値が初期値となる

Intent や Arguments の値を初期値として取得できるので取得処理が楽になります。

class SampleActivity : AppCompatActivity(R.layout.sample_activity) {
  private val state by savedState()
  private var count by state.property<Int>()

  companion object {
    fun createIntent(context: Context, count: Int) {
      return Intent(context, SampleActivity::class.java)
        .also {
          it.putExtra(SampleActivity::count.name, count)
        }
      }
    }
  }
}

プロパティリファレンスで変数名をキーにできるので、キーの定数の定義が不要になります。

# 更新内容

build.gradle に以下を追加してください。

repositories {
    maven { url "https://www.jitpack.io" }
}
dependencies {
    implementation 'com.github.wada811:View-SavedState-ktx:1.1.0-alpha01'
}

## property<T>() と property<T>(defaultValue: T) メソッドの追加

get/set 処理の記述が不要になりました。property<T>() は Intent や Arguments で初期値を設定していない場合、例外が発生します。初期値を設定していない場合は、 property<T>(defaultValue: T) を利用してください。

class SampleActivity : AppCompatActivity(R.layout.sample_activity) {
  private val state by savedState()
  private var count by state.property<Int>()
  private var text by state.property<String>(defaultValue = "sample")

  companion object {
    fun createIntent(context: Context, count: Int) {
      return Intent(context, SampleActivity::class.java)
        .also {
          it.putExtra(SampleActivity::count.name, count)
        }
      }
    }
  }
}

## View.savedState() 拡張関数の追加

カスタム View でも View-SavedState-ktx を利用することができるようになりました。Activity や Fragment での利用方法と変わりません。

class SampleView
@JvmOverloads
constructor(
  context: Context,
  attrs: AttributeSet? = null,
  defStyleAttr: Int = android.R.attr.textViewStyle
) : AppCompatTextView(context, attrs, defStyleAttr) {
  private val state by savedState("saved_state_key")
  private var count: Int by state.property(defaultValue = 0)
}

View の id を状態保存・復元のキーにしているので必要な場合は savedState() にキーを指定してください。

# View-SavedState-ktx 1.1.0-alpha01 はこちら

# 参考リンク

本来の AndroidX SavedState の利用方法を知りたい方にはコチラがオススメです。

AndroidX SavedState を完全に理解したい場合は、コチラのソースコードリーディング記録がオススメです。

このライブラリに関する記事をコチラのマガジンでまとめています。ライブラリを更新した場合、更新内容についての記事の通知を受け取れるので良ければフォローして下さい。

ここから先は

0字
このマガジンを購読すると、マガジンに追加されているノートを、有料ノート・無料ノートにかかわらず、すべて閲覧することができるようになります。また、購入後に追加されたノートがあった場合、追加料金なしですべてのノートを閲覧できます。

SavedState を簡単に使えるライブラリ View-SavedState-ktx についての記事をまとめています。

この記事が気に入ったらサポートをしてみませんか?