fragmento de Android onRestoreInstanceState

Respuestas:

200

Los fragmentos no tienen onRestoreInstanceStatemétodo.

Puede lograr el mismo resultado en onActivityCreated, que recibe un paquete con el estado de instancia guardado (o nulo).

Consulta el código fuente aquí .

mgv
fuente
90
Ese no es un diseño consistente, ¿verdad?
Ehtesh Choudhury
4
Esto tampoco se ocupa de reanudar el fragmento, ¿verdad? está bien para los cambios de configuración, pero ¿qué pasa si vas a una actividad desde un fragmento y luego vuelves al fragmento?
speedynomads
1
Los fragmentos deben pertenecer a una actividad para empezar, por lo que si guarda en el fragmento, se guarda en la actividad principal. Entonces, si deja ese fragmento (que pertenece a una actividad) y vuelve al fragmento, todos los valores se restauran a partir de la actividad principal
Shaun
3
onActivityCreated () no es el único método para restaurar el estado del fragmento. Puede restaurarlo durante onCreate (), onCreateView () o onActivityCreated (). developer.android.com/guide/components/fragments.html
shaby
1
@EhteshChoudhury Nada en el desarrollo de aplicaciones de Android es un "diseño coherente". Todo está desordenado y todo está "obsoleto".
Karanveer Singh
43

Sé que ha aceptado la respuesta, pero debe leer la documentación oficial sobre los fragmentos , y dice (párrafo "Manejo del ciclo de vida de los fragmentos"):

Puede conservar el estado de un fragmento mediante un paquete, en caso de que se elimine el proceso de la actividad y necesite restaurar el estado del fragmento cuando se vuelva a crear la actividad. Puede guardar el estado durante la devolución de llamada onSaveInstanceState () del fragmento y restaurarlo durante onCreate (), onCreateView () o onActivityCreated ()

Por lo tanto, se puede utilizar que más le convenga: onCreate(), onCreateView()oonActivityCreated()

Jimpanzer
fuente
29

En el ejemplo de ListFragment de la guía Fragments puede encontrar:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

Que puedes usar así:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() se invoca después de que el fragmento regresa de la pila.

Gaurav Darji
fuente
13

onViewStateRestoredde Fragmentes el equivalente de onRestoreInstanceStatede Activity. Pero se llama después onActivityCreated(Bundle)y antes onStart().

nhkhanh
fuente