ボタンの表で構成されるビュー階層を保存および復元しようとしています。テーブルに必要なテーブルの行とボタンの数は、実行時まで認識されず、Activity
のonCreate(Bundle)
メソッドで膨らんだxmlレイアウトにプログラムで追加されます。私の質問は、最終的なテーブルを保存し、Androidのデフォルトビューを使用して復元/復元の復元を行うことができますか?保存された状態からビュー階層を復元しても、プログラムによって追加されたビューは復元されません
私の現在の試みの例は以下の通りです。最初の実行では、テーブルは期待どおりに構築されます。アクティビティが破棄されると(デバイスを回転させることによって)、再構築されたビューには、子なしの空のTableLayout
のみが表示されます。
setContentView(int)
で参照されるxmlファイルには、特に、ボタンが追加された空のTableLayout
が含まれます。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Setup this activity's view.
setContentView(R.layout.game_board);
TableLayout table = (TableLayout) findViewById(R.id.table);
// If this is the first time building this view, programmatically
// add table rows and buttons.
if (savedInstanceState == null) {
int gridSize = 5;
// Create the table elements and add to the table.
int uniqueId = 1;
for (int i = 0; i < gridSize; i++) {
// Create table rows.
TableRow row = new TableRow(this);
row.setId(uniqueId++);
for (int j = 0; j < gridSize; j++) {
// Create buttons.
Button button = new Button(this);
button.setId(uniqueId++);
row.addView(button);
}
// Add row to the table.
table.addView(row);
}
}
}
私の理解では、Androidがいる限り、彼らはそれらに割り当てられたIDを持っているとして、ビューの状態を保存し、活動が再作成されたときにビューを復元することですが、今、XMLレイアウトと何をreinflateているようですもっと。コードをデバッグすると、テーブル内の各Button
でonSaveInstanceState()
が呼び出されていることを確認できますが、onRestoreInstanceState(Parcelable)
はそうではありません。
そうです、フレームワークは各ビューの状態を保存して復元しますが、ビューの存在は保存しません。そのため、 'savedInstanceState'がnullであるかどうかにかかわらず、' setContentView() 'を呼び出さなければならず、' onCreate() '(フラグメントの場合は' onCreateView() ')で動的ビューを自分で作成しなければなりません。あとで 'onStart()'のように)ビューを追加すると、内容が復元するには遅すぎることに注意してください。 –
基本的に、アクティビティに複数のビューとフラグメントが生成されている場合は、各ID、各ビュー、各タイプのFragmentを覚えておく必要がありますか?このチョイスの理由は何ですか?アプリが殺されたときのようにすべてを復活させるのはなぜですか? –
onCreateでビューを追加できない場合はどうなりますか? –