onsaveinstancestate只能运行一次?

时间:2014-11-01 18:39:15

标签: android android-activity

我有一个有两种布局(纵向和横向)的应用程序。我想保存4个int值,因此它们不会在旋转时被删除。为此,我调用了save实例,然后在onCreate方法上恢复状态,如下所示:

 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只能工作一次。为什么呢?

1 个答案:

答案 0 :(得分:0)

因为savedInstanceState在所有后续轮换中都不为空,所以你永远不会生成新数字(例如:永远不再调用它:operando1 = generador.nextInt(1000) ...等等......)