2014-11-01 3 views
1

두 가지 레이아웃 (세로 및 가로)이있는 앱이 있습니다. 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 후속 회전 모두 null이 아니기 때문에

답변

0

, 당신은 결코 새로운 번호가 생성되지 않습니다 (예를 : 결코이 다시 호출하지 : operando1 = generador.nextInt(1000) ... 등)

+0

는 네, 예상되는 동작입니다. 그것은 처음에만 숫자를 생성해야하고 다음 숫자는 이미 생성 된 숫자를 사용해야합니다. 대신 숫자를 처음 생성 할 때, 저장된 숫자를 두 번째로 사용하지만 카운터가 올라간 경우 (코드가 아닌 경우) 해당 변경 사항이 기록되지 않습니다. – kace91

+0

'//다른 임의의 코드 '에서 무엇을하고 있든지 상관없이, 그것을 savedInstanceStateFields로 오버라이드 할 것입니다. 상태를 복원 한 후에'// other randomCode'를 배치하는 것이 좋습니다. 그것은 당신이 일을하는 순서의 문제입니다. – akodiakson

+0

저장하려는 수정 내용은 // 다른 임의 코드에서는 발생하지 않지만 버튼의 oncreate() 메서드에서는 발생하지 않습니다. – kace91

관련 문제