0

での保存Stack<Stack<View>>は可能ですかonSaveInstanceState

アクティビティの状態を管理するために特定のデータを保存する別の方法がありますか?

4

2 に答える 2

1

ビューをバンドルに保存することはできません。そして、あなたはとにかくそれをすべきではありません。アクティビティが再作成されると、レイアウトが再度膨張し (または、構成が変更されている場合は別のレイアウトが膨張し)、新しいビュー階層が作成されます。

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");
    }
}
于 2013-09-18T08:58:56.390 に答える
0

onSaveInstanceState で Stack> を保存することは可能ですか。

いいえ、スタックとビューには、オブジェクトをバンドルに入れるために必要な Parcelable / Serializable インターフェイスがないためです。バンドルは、配列/ArrayList、文字列、プリミティブなどのみを受け取ります。

アクティビティの状態を管理するために特定のデータを保存する別の方法がありますか?

どのデータを保存しますか? View/ViewGroup 全体を保存したい場合は、おそらく間違った方向に進んでいます。

たとえば、TextView が表示されたことを示すには、ブール値を true に設定し、それを Bundle に入れます。onCreate() のブール値を確認し、View を表示に設定します。TextView にもテキストが含まれている場合は、それを String として保存し、テキストを TextView に設定して表示します。

于 2013-09-18T08:58:34.893 に答える