android - fragments - savedInstanceState al restaurar el fragmento de la pila posterior
delete fragment from backstack (4)
El problema es que el fragmento debe tener una Id
o Tag
asociada para que FragmentManager
pueda seguirlo.
Hay al menos 3 formas de hacer esto:
En el diseño xml, declare una
Id
para su fragmento:android:id=@+id/<Id>
Si su contenedor de fragmentos tiene una
Id
, use FragmentTransaction :FragmentTransaction add (int containerViewId, Fragment fragment)
Si su fragmento no está asociado a ninguna
View
(por ejemplo, fragmento sin cabeza), dele unaTag
:FragmentTransaction add (Fragment fragment, String tag)
Además, vea esta respuesta SO.
¿Puedo usar savedInstanceState()
para guardar el estado al eliminar un fragmento, luego restaurar el estado cuando hago estallar el fragmento de la pila posterior? Cuando restauro el fragmento de la pila posterior, el paquete savedInstanceState siempre es nulo.
En este momento, el flujo de la aplicación es: fragmento creado -> fragmento eliminado (agregado a la pila posterior) -> fragmento restaurado desde la pila posterior (el paquete SavedInstanceState es nulo).
Aquí está el código relevante:
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
Long playlistId = bundle.getLong(Constants.PLAYLIST_ID);
int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID);
if (savedInstanceState == null) {
selectedVideoNumber = playlistItemId;
} else {
selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO");
}
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber);
}
Creo que el problema es que onSavedInstanceState()
nunca se llama cuando se elimina y se agrega a la pila trasera. Si no puedo usar onsavedInstanceState (), ¿hay alguna otra manera de arreglar esto?
FWIW, también toqué esto, pero en mi caso onSaveInstanceState se llamó correctamente y presioné mis datos de estado cuando apareció un nuevo fragmento de actividad en el teléfono inteligente. Igual que usted, el onActivityCreated se llamó w / savedInstanceState siempre nulo. En mi humilde opinión, creo que es un error.
Trabajé alrededor creando un estado estático de Mi Aplicación y poniendo los datos allí para el equivalente de "variables globales" ...
Me gusta almacenar la Vista que regreso en onCreateView como una variable global y luego cuando regreso simplemente compruebo esto:
if(mBaseView != null) {
// Remove the view from the parent
((ViewGroup)mBaseView.getParent()).removeView(mBaseView);
// Return it
return mBaseView;
}
onSaveInstanceState (desafortunadamente) no se llama en la recreación de back-stack normal de un fragmento. Consulte http://developer.android.com/guide/components/fragments.html#Creating y la respuesta en ¿Cómo puedo mantener el estado del fragmento cuando se agrega a la pila de respaldo?