での保存Stack<Stack<View>>
は可能ですかonSaveInstanceState
?
アクティビティの状態を管理するために特定のデータを保存する別の方法がありますか?
ビューをバンドルに保存することはできません。そして、あなたはとにかくそれをすべきではありません。アクティビティが再作成されると、レイアウトが再度膨張し (または、構成が変更されている場合は別のレイアウトが膨張し)、新しいビュー階層が作成されます。
UI からビジネス データを分離し、onSaveInstanceState に保存する必要があります。アクティビティを再作成した後、そのデータを取得し、それに応じて新しいビュー階層を更新する必要があります。
たとえば、フィールド mSuperText に保存されているテキストを表示する TextView があり、アクティビティがダウンしている場合は、onSaveInstanceState のバンドルに保存する必要があります。
@Override
protected void onSaveInstanceState(final Bundle outState) {
outState.putString("supertext", mSuperText);
}
アクティビティが再作成されると、メソッド onCreate で、以前に保存したバンドルとなる引数 onCreate(final Bundle savedInstanceState) を取得します。したがって、必要な値を取得できます。
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mSuperText = savedInstanceState.getString("superText");
}
}
onSaveInstanceState で Stack> を保存することは可能ですか。
いいえ、スタックとビューには、オブジェクトをバンドルに入れるために必要な Parcelable / Serializable インターフェイスがないためです。バンドルは、配列/ArrayList、文字列、プリミティブなどのみを受け取ります。
アクティビティの状態を管理するために特定のデータを保存する別の方法がありますか?
どのデータを保存しますか? View/ViewGroup 全体を保存したい場合は、おそらく間違った方向に進んでいます。
たとえば、TextView が表示されたことを示すには、ブール値を true に設定し、それを Bundle に入れます。onCreate() のブール値を確認し、View を表示に設定します。TextView にもテキストが含まれている場合は、それを String として保存し、テキストを TextView に設定して表示します。