Android onsaveinstancestate只工作一次?
我有一个应用程序有两种布局(纵向和横向)。我想保存4个int值,这样它们就不会在旋转时被擦除。为此,我调用save instance,然后恢复onCreate方法的状态,如下所示:Android onsaveinstancestate只工作一次?,android,android-activity,Android,Android Activity,我有一个应用程序有两种布局(纵向和横向)。我想保存4个int值,这样它们就不会在旋转时被擦除。为此,我调用save instance,然后恢复onCreate方法的状态,如下所示: private int operando1; private int operando2; private int operador; private int contadorIntentos; private String operadorTxt; private sta
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在随后的所有循环中都不是空的,所以您永远不会生成新的数字(例如:不再调用这个:
operato1=generador.nextInt(1000)
…等等)。是的,这是预期的行为。它应该只在第一次生成数字,下一次应该使用已经生成的数字。相反,它会在第一次生成数字时,第二次使用保存的数字,但如果计数器上升(在非包含的代码中),则不会记录该更改。无论您在//其他随机代码中执行什么操作,都将使用SavedInstanceStates字段覆盖它。我建议在恢复状态后放置//other randomCode
。我想保存的修改不会发生在//其他随机代码中,而是发生在oncreate()方法之外的一个按钮中。