Я пытаюсь сохранить и восстановить иерархию представлений, состоящую из таблицы кнопок. Количество строк таблицы и кнопок, необходимых в таблице, неизвестно до времени выполнения и добавляется программно к расширенному XML-макету в моем методе Activity
onCreate(Bundle)
. Мой вопрос: можно ли сохранить и восстановить итоговую таблицу, используя реализацию сохранения/восстановления представления Android по умолчанию?
Ниже приведен пример моей текущей попытки. При первом запуске таблица строится так, как ожидалось. Когда действие уничтожается (путем поворота устройства), перестроенное представление показывает только пустой TableLayout
без дочерних элементов.
XML-файл, указанный в setContentView(int)
, включает, среди прочего, пустой 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 сохраняет состояние представлений до тех пор, пока им назначен идентификатор, и восстанавливает представления при повторном создании активности, но сейчас кажется, что он повторно наполняет макет xml и ничего больше. При отладке кода я могу подтвердить, что onSaveInstanceState()
вызывается для каждой Button
в таблице, а onRestoreInstanceState(Parcelable)
— нет.