View.onSaveInstanceStateの戻り値、View.onRestoreInstanceStateの引数には、Parcelableなオブジェクトが当てはまるのだが、View.BaseSavedStateを継承したオブジェクトを適用するのが最も一般的らしい。
(Bundleでも方法はあるらしいのだが、今回はView.BaseSavedStateを使う。)
View.BaseSavedState | Android Developers
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
fragmentの状態保持について - うさがにっき
勉強中: Viewの状態を保存する
activity_main.xmlで、
前回と同様でButtonあり。
CustomSavedState.javaで、
基本的にParcelableの実装。
CustomView.javaで、
保存する時は、super.onSaveInstanceStateの戻り値を、CustomSavedStateのコンストラクタ引数に渡して生成。
そこにテキストをセットして戻り値で返す。
復元する時は、stateをCustomSavedStateにキャストして、css.getSuperStateをsuper.onRestoreInstanceStateにセット。
あとはstateの各テキストをもらってinvalidateで更新。
MainActivity.javaで、
Buttonを押してのテキストのセットも実装。
この状態から始まる。
Buttonを押すと、
テキストがセットされる。
回転させても、
テキストは、保存、復元されている。