from fragments example delete backstack addtobackstack android android-fragments bundle back-stack

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:

  1. En el diseño xml, declare una Id para su fragmento:

    android:id=@+id/<Id>

  2. Si su contenedor de fragmentos tiene una Id , use FragmentTransaction :

    FragmentTransaction add (int containerViewId, Fragment fragment)

  3. Si su fragmento no está asociado a ninguna View (por ejemplo, fragmento sin cabeza), dele una Tag :

    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; }