KotlinのParcelableを使ってみた

2017.12.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Kotlin1.1.4で追加されたParcelable Supportを使ってみました。

用途としては、画面回転時にActivityが破棄されてしまうので、BundleにParcelableを突っ込んで、復元処理をしたりすると思います。

Kotlinでは、この辺をいい感じにしてくれるParcelableSupportがあるので使ってみました。

2017/12/22時点ではexperimentalです

ソースコード

app/build.gradle

android {
    ...
    androidExtensions {
        experimental = true
    }
}

dependencies { 
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}

Todo.kt

@SuppressLint("ParcelCreator")
@Parcelize
data class Todo constructor(
        val id: String,
        val body: String) : Parcelable

MainActivity.kt

class MainActivity : AppCompatActivity() {

    companion object {
        val KEY_TODO = "todo"
    }

    lateinit var todo: Todo

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        todo = if (savedInstanceState == null) {
            Todo("id", "body").apply {
                Log.d("instance", "newInstance: $this")
            }
        } else {
            savedInstanceState.getParcelable<Todo>(KEY_TODO).apply {
                Log.d("instance", "saveInstance: $this")
            }
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putParcelable(KEY_TODO, todo.copy(body = "copy body"))
    }
}

まとめ

アノテーションをつけるだけで楽ですね。experimentalでなくなる日を楽しみしてます。

参考