onsaveinstancestate只能工作一次?
问题描述:
我有两个布局(肖像和风景)的应用程序。有4个我想要保存的int值,因此它们在旋转时不会被擦除。为此,我呼吁拯救实例,然后我恢复在onCreate方法的状态是这样的:onsaveinstancestate只能工作一次?
private int operando1;
private int operando2;
private int operador;
private int contadorIntentos;
private String operadorTxt;
private static final String CONTADOR_INTENTOS = "contadorIntentos";
private static final String OPERANDO1 = "operando1";
private static final String OPERANDO2 = "operando2";
private static final String OPERADOR = "contadorIntentos";
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(CONTADOR_INTENTOS, contadorIntentos);
outState.putInt(OPERANDO1, operando1);
outState.putInt(OPERANDO2, operando2);
outState.putInt(OPERADOR, operador);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_actividad_principal);
//other random code
Random generador = new java.util.Random();
if (savedInstanceState != null){
contadorIntentos = savedInstanceState.getInt(CONTADOR_INTENTOS);
operando1 = savedInstanceState.getInt(OPERANDO1);
operando2 = savedInstanceState.getInt(OPERANDO2);
operador = savedInstanceState.getInt(OPERADOR);
}else {
contadorIntentos = 0;
operando1 = generador.nextInt(1000);
operando2 = generador.nextInt(1000);
operador = generador.nextInt(4);
}
嗯,事实证明,它不仅节省了状态一次。第一次旋转后(当它保存正确)后,如果我修改的东西,并再次旋转它恢复第一次旋转的状态。这就像onsaveinstancestate只能使用一次。为什么?
答
因为savedInstanceState并非在所有后续的转空,你永远不会产生新的编号(例如:从来没有这样再次调用:operando1 = generador.nextInt(1000)
...等...)
是的,那是预期的行为。它应该只在第一次生成数字,而下一个应该使用已经生成的数字。相反,第一次它会生成数字,第二次使用已保存的数字,但如果计数器上升(在未包含的代码中),则不会记录该更改。 – kace91 2014-11-01 18:59:37
无论你在'//其他随机代码中做什么,你都会用savedInstanceStateFields覆盖它。我建议在恢复状态后放置'// other randomCode'。这是你做事的顺序问题。 – akodiakson 2014-11-01 19:03:36
我想要保存的修改不会发生在其他随机代码中,而是出现在oncreate()方法中的按钮中。 – kace91 2014-11-01 19:07:43