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
новый предлагает).