Подтвердить что ты не робот

Сохранение и восстановление состояния Android

Мне известно о сохранении и восстановлении состояния активности. Но я хочу сохранить и восстановить состояние представления. У меня есть пользовательский вид и два переопределенных метода:

@Override
protected void onRestoreInstanceState(Parcelable state) {
    if (state instanceof Bundle) {
        Bundle bundle = (Bundle) state;
        currentLeftX = bundle.getInt(CURRENT_LEFT_X_PARAM, 0);
        currentTopY = bundle.getInt(CURRENT_TOP_Y_PARAM, 0);
    }
    super.onRestoreInstanceState(state);
}

@Override
protected Parcelable onSaveInstanceState() {
    super.onSaveInstanceState();
    Bundle bundle = new Bundle();
    bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX);
    bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY);
    return bundle;
}

Я ожидал, что это будет работать бесшовно, но встречается и ошибка:

Вызвано: java.lang.IllegalArgumentException: Неверный класс состояния, ожидающий View Состояние, но получил класс android.os.Bundle вместо этого. Эта обычно происходит, когда два вида разные типы имеют одинаковый идентификатор в той же иерархии. Этот идентификатор вида ID/mapViewId. Убедитесь, что другие представления не использовать один и тот же идентификатор.         на android.view.View.onRestoreInstanceState(View.java:6161)

Но это мнение является единственным в моей деятельности. Итак, я спрашиваю:

Каков правильный способ сохранения состояния представления?

4b9b3361

Ответ 3

Я мог ошибаться, но я думаю, вам нужно сохранить пакет, возвращаемый родителем:

@Override
protected Parcelable onSaveInstanceState() {
    Parcelable bundle = super.onSaveInstanceState();
    bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX);
    bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY);
    return bundle;
}

В противном случае вы потеряете все сохраненные суперклассы.