Проблема обработки изменения ориентации в пользовательском представлении - PullRequest
1 голос
/ 04 января 2011

Я написал собственное представление, которое расширяет LinearLayout. Он содержит два представления: «заголовок» и «тело». Пользовательское представление поддерживает «расширенное» состояние, которое включается и выключается при каждом щелчке по представлению заголовка. Когда оно расширено, тело ВИДИМО, а когда не расширено, тело УЖЕ. Я хочу сохранить расширенное состояние этого представления при изменении ориентации устройства, поэтому я написал onSaveInstanceState и onRestoreInstanceState, чтобы сохранить расширенный флаг.

Одна из проблем заключается в том, что если я переориентирую устройство при развертывании любого из этих видов, то все действия перерисовываются без изменения ориентации видов. (Если я переключаюсь с портретного на горизонтальный, экран остается в портретном режиме.) Если ни одно из пользовательских видов не раскрывается, дерево представления действия корректно переориентируется.

Вот моя логика для представления onRestoreInstanceState:

protected void onRestoreInstanceState(Parcelable state) {
    SavedState ss = (SavedState) state;
    super.onRestoreInstanceState(ss.getSuperState());
    if (ss.expanded != mHeader.isExpanded()) {
        mHeader.toggleExpanded();
    }
    mBody.setVisibility(ss.expanded ? VISIBLE : GONE);
}

Что я делаю не так?

...