onSaveInstanceState не вызывается после поворота экрана

Я знаю, что на SaveInstanceState реорганизуется множество очередей, но я не смог найти ответ на свою проблему.

У меня есть активность, которая расширяет AppCompatActivity; это действие использует 3 фрагмента и имеет переменную int currentStep для отслеживания того, какой фрагмент отображается. В методе onSavedInstanceState я сохраняю переменную currentStep в комплекте, а затем в методе onCreate восстанавливаю ее.

public class MainActivity extends AppCompatActivity {
    private final String CURRENT_STEP_TAG = "current_step";
    private int currentStep;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pedido);        

        if(savedInstanceState == null) {
            loadFirstFragment();
        } else {            
            currentStep = savedInstanceState.getInt(CURRENT_STEP_TAG);
            if(currentStep == 2){
                //Do some stuff...
            }
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        Log.d("deubg", "--------onsaveinstancestate--------");
        outState.putInt(CURRENT_STEP_TAG, currentStep);
        super.onSaveInstanceState(outState, outPersistentState);
    }

 ...

}

Дело в том, что onSavedInstanceState не будет вызываться при изменении экранной ориентации, и, согласно документации Google, должно. Сообщение "-------- onsaveinstancestate --------" не отображается в консоли. Однако Bundle saveInstanceState в методе onCreate не является нулевым после поворота экрана, но не имеет int 'currentStep'.

Я перепробовал много вещей: изменил AppCompatActivity для ActionBarActivity, переместил вызов super.onSavedInstanceState в разные места, попытался сохранить другие переменные; но независимо от того, что я делаю, метод не выполняется.

Также у меня нет Android:configChanges в моем манифесте.

Мое приложение компилируется с SDK версии 22, buildToolsVersion 22.0.1

1 ответ

Решение

Если ваше приложение не работает на Lollipop (API21) версии Android или новее, ваш

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);

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

public void onSaveInstanceState (Bundle outState);

Это также будет работать с API 21+, поэтому вам не нужно переопределять оба метода, конечно (если вы не знаете, что вам нужно иметь дело с PersistableBundle новый предлагает).

Смотрите документы.

Другие вопросы по тегам