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

OnSaveInstanceState не вызывается после вращения экрана

Я знаю, что есть много вопросов, которые относятся к onSaveInstanceState, но я не смог найти ответ на свою проблему.

У меня есть активность, которая расширяет 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 savedInstanceState в методе onCreate не имеет значения null после вращения экрана, но у него нет int 'currentStep'.

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

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

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

4b9b3361

Ответ 1

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

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);

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

public void onSaveInstanceState (Bundle outState);

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

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