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) ...等...)

+0

是的,那是预期的行为。它应该只在第一次生成数字,而下一个应该使用已经生成的数字。相反,第一次它会生成数字,第二次使用已保存的数字,但如果计数器上升(在未包含的代码中),则不会记录该更改。 – kace91 2014-11-01 18:59:37

+0

无论你在'//其他随机代码中做什么,你都会用savedInstanceStateFields覆盖它。我建议在恢复状态后放置'// other randomCode'。这是你做事的顺序问题。 – akodiakson 2014-11-01 19:03:36

+0

我想要保存的修改不会发生在其他随机代码中,而是出现在oncreate()方法中的按钮中。 – kace91 2014-11-01 19:07:43