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이 아니기 때문에
는 네, 예상되는 동작입니다. 그것은 처음에만 숫자를 생성해야하고 다음 숫자는 이미 생성 된 숫자를 사용해야합니다. 대신 숫자를 처음 생성 할 때, 저장된 숫자를 두 번째로 사용하지만 카운터가 올라간 경우 (코드가 아닌 경우) 해당 변경 사항이 기록되지 않습니다. – kace91
'//다른 임의의 코드 '에서 무엇을하고 있든지 상관없이, 그것을 savedInstanceStateFields로 오버라이드 할 것입니다. 상태를 복원 한 후에'// other randomCode'를 배치하는 것이 좋습니다. 그것은 당신이 일을하는 순서의 문제입니다. – akodiakson
저장하려는 수정 내용은 // 다른 임의 코드에서는 발생하지 않지만 버튼의 oncreate() 메서드에서는 발생하지 않습니다. – kace91