onSaveInstanceState в FrameLayout, вызывающий сбой

У меня есть пользовательская ViewGroup, расширяющая FrameLayout. При изменении ориентации мне нужно сохранить одно значение int. Я переопределяю onSaveInstanceState() и onRestoreInstanceState(Parcelable state), чтобы сохранить старое значение. Мой код приведен ниже

                @Override
                    protected Parcelable onSaveInstanceState() {
                        final Bundle bundle = new Bundle();
                        bundle.putInt(POSITION, position);
                        return bundle;
                    }

                    @Override
                    protected void onRestoreInstanceState(Parcelable state) {
                        if (state instanceof Bundle) {
                            Bundle bundle = (Bundle) state;
                            mPosition = bundle.getInt(POSITION);
                        }
                        super.onRestoreInstanceState(state);
                    }

Но у меня сбой.

java.lang.IllegalStateException: Derived class did not call super.onSaveInstanceState()

Но если я вызову super.onSaveInstanceState() на onSaveInstanceState, как я могу вернуть значение моего пакета?

В чем проблема?

Заранее спасибо!!


person Community    schedule 27.02.2017    source источник
comment
Но если я вызову super.onSaveInstanceState() для onSaveInstanceState, как я могу вернуть значение пакета? Почему нет? просто сделайте super.onSaveInstanceState() своей первой строкой. Это будет работать нормально   -  person mehulmpt    schedule 27.02.2017
comment
да, вы можете вернуть значение пакета после вызова super.onSaveInstanceState()   -  person Rahul Kumar    schedule 27.02.2017
comment
Но есть одна проблема. Если я вызову `super.onSaveInstanceState();`, он будет работать, но onRestoreInstanceState снова произойдет сбой. В тот момент, когда я вызываю `super.onRestoreInstanceState(state);`, я получаю сообщение об ошибке Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.os.Bundle instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/frm. Make sure other views do not use the same id.   -  person    schedule 27.02.2017
comment
@MehulMohan понял проблему?   -  person    schedule 27.02.2017


Ответы (1)


вызвать суперметод в onSaveInstanceState()

 @Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);  // call super method
    // your code
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    // your code
}
person rafsanahmad007    schedule 27.02.2017
comment
Пожалуйста, проверьте мой комментарий выше - person ; 27.02.2017
comment
взгляните на это создание собственного SavedState с Parcelable данными - person rafsanahmad007; 27.02.2017
comment
Это единственный способ? Тогда каково намерение onSaveInstanceState и onRestoreInstanceState, если мы не можем передавать наши данные напрямую? - person ; 27.02.2017