Guarde el estado de TextView y Spinner dentro de CustomView

Tengo 3 vistas personalizadas. El primero funciona muy bien. Contiene un EditText cuando lanzo una intención y vuelvo a restaurar lo que el usuario ingresó.

El segundo contiene un TextView y el tercero un Spinner. No salvan cuando lanzo mi intento y vuelvo.

Creo que sé cómo conservar los datos usando onSaveInstanceState y onRestoreInstanceState en mis vistas personalizadas. Sin embargo, cuando la actividad que contiene las vistas personalizadas no se elimina (lo que significa que solo está en pausa), y no se llama a onRestoreInstanceState.

Esto es lo que llamo en mis vistas personalizadas cuando necesito guardarlas.

    @Override
public Parcelable onSaveInstanceState() {
    textValue = editText.getText().toString();
    Bundle bundle = new Bundle();
    bundle.putParcelable("instanceState", super.onSaveInstanceState());
    bundle.putString(TEXT_VALUE_KEY, this.textValue);

    return bundle;
}

@Override
public void onRestoreInstanceState(Parcelable state) {
    if (state instanceof Bundle) {
        Bundle bundle = (Bundle) state;
        textValue = bundle.getString(TEXT_VALUE_KEY);
        editText.setText(textValue);
        super.onRestoreInstanceState(bundle.getParcelable("instanceState"));
        return;
    }

    super.onRestoreInstanceState(state);
}

No estoy seguro de lo que debo hacer ya que onRestoreInstanceState no se llama. Creo que EditText customView funciona porque el comportamiento predeterminado de Android los guardó temporalmente, pero no guarda los giradores ni TextViews.

preguntado el 04 de diciembre de 13 a las 23:12

1 Respuestas

Deberías cambiar tu onCreate() método para comprobar si el Activity ya ha llamado onSavedInstanceState Me gusta esto:

@Override
public void onCreate(Bundle savedInstanceState) {
    if(savedInstanceState == null) {
        // The activity haven't called onSavedInstanceState(), which means you should initialize your objects and UI here
    }
    else {
        // Whatever states you saved onSavedInstanceState() are stored in savedInstaceState, so use them to reconstruct your customViews
    }
}

Respondido el 05 de diciembre de 13 a las 01:12

Gracias por responder Christopher, creo que lo descubrí. Tengo un método .configure en mis vistas personalizadas que estaba llamando desde onResume en mi fragmento. Tenía una declaración que aclaraba los valores que necesitaba. Sin embargo, el principal problema que estaba teniendo es que en los casos en los que tendría problemas, solo se llamaría a onResume. Sin onCreate o onRestoreInstanceState. Sin embargo, dado que lo estaba haciendo mal, no estoy seguro de que deba haber una solución para mi escenario. - user2484014

Entiendo. Tengo el presentimiento de que tal vez si llama al método de configuración desde onCreate, en lugar de onResume, podría mantener su estado. De lo contrario, intente configurar sus fragmentos en su onCreateView, ya que mantienen sus estados de forma nativa, deben reconstruirse por sí mismos después de llamar a onResume: Christopher francisco

Hola Christopher, me disculpo por no responder antes. Tuve que tomarme un día libre de mi proyecto. Creo que tiene toda la razón en que se llama a la reanudación cada vez que regresa y, en general, la "Configuración" no debe realizarse todas las veces, ya que ya debería estar configurada. Llegué a la misma conclusión que me diste "Intenta configurar tus fragmentos en su onCreateView". Es curioso cómo las cosas funcionan mejor si usas las herramientas para lo que fueron diseñadas. Marqué su respuesta como la respuesta aceptada, ya que abordó el problema. Mi pregunta original es irrelevante. Muchas gracias por la ayuda. - user2484014

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.