Восстановление иерархии представлений из сохраненного состояния не восстанавливает представления, добавленные программно.

Я пытаюсь сохранить и восстановить иерархию представлений, состоящую из таблицы кнопок. Количество строк таблицы и кнопок, необходимых в таблице, неизвестно до времени выполнения и добавляется программно к расширенному XML-макету в моем методе ActivityonCreate(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)— нет.

12
задан Cœur 4 January 2019 в 10:02
поделиться