studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android fragment bundle

para - manual de programacion android pdf



SavedInstanceState siempre es nulo en el fragmento (5)

Ok, sé que esta es una publicación antigua, pero no pude encontrar la respuesta correcta para mí aquí ni en muchos otros lugares, así que estoy publicando cómo solucioné mi caso.

Así que mi fragmento está dentro de una actividad. Y originalmente intenté guardar Bundle solo en Fragmento y recuperarlo en onCreateView. Sin embargo ese fue el problema.

Arreglé esto al iniciar el objeto myFragment en la actividad y puse ese objeto en el paquete de actividades en onSaveInstanceState (). Luego lo recuperó en onRestoreInstanceState (). Utilicé getSupportFragmentManager (). PutFragment / getFragment. Entonces el savedInstanceState en el fragmento ya no era nulo.

Tengo un fragmento adjunto a la actividad utilizando XML (y setContentView () en la actividad). A tengo un problema porque tengo vistas muy dinámicas en mi fragmento, así que cuando cambie la orientación debo restaurar todos los estados de vista.

Tengo un problema porque estoy usando algo así:

public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("restore", true); outState.putInt("nAndroids", 2); }

Pero después del cambio de orientación, cuando se llaman métodos con param Bundle savedInstanceState (como onCreateView, etc.) my savedInstanceState siempre es nulo.

No soy un novato en Android, pero ahora estoy muy enojado por este problema ...

public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (savedInstanceState == null) { //smth } else { // smthelse THIS IS NEVER REACHED BECAUSE BUNDLE IS ALWAYS NULL } getListView().setDivider(getResources().getDrawable(R.drawable.list_divider)); }


Primero debe poner sus datos, luego llamar a super.onSaveInstanceState(outState);

public void onSaveInstanceState(Bundle outState) { outState.putBoolean("restore", true); outState.putInt("nAndroids", 2); super.onSaveInstanceState(outState); }

Y asegúrese de que la actividad no nohistory propiedades nohistory en AndroidManifest.xml o nohistory a false .

<activity android:noHistory="false">


Todo el problema fue que no declaro android: id para el fragmento en XML. Android necesita ID o TAG para reconocer el fragmento almacenado y reproducir todos los elementos en él. Entonces, chicos, recuerden: ¡cada instancia de fragmento necesita una identificación o etiqueta única!

Además, cuando se declara setRetainInstance (true), el paquete siempre debe devolver un valor nulo.


Tuve un problema similar en el que siempre recibía saveInstanceState como nulo a pesar de haber suministrado el paquete al Fragmento.

La única solución que funcionó para mí fue hacer.

myFragment.setArguments(bundle)

con mi paquete de la Actividad y hacer una

Bundle bundle = this.getArguments();

en onCreateView del fragmento.

Espero que esto ayude a alguien más.


Para Fragmento: -

use this for save state of fragment on orientation. onCreate(Bundle save) { super.onCreate(save); setRetainInstance(true); }

Vea este tutorial: - http://techbandhu.wordpress.com/2013/07/02/android-headless-fragment/

Para la Actividad: -

Cuando inicia su aplicación, en onCreate , su objeto de paquete es nulo, por lo que tiene que marcar como se muestra a continuación y cuando gire su pantalla, se llama onSaveInstance y su objeto de paquete se inicializa.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game); if (savedInstanceState != null) { boolean t = outState.getBoolean("restore"); int s = outState.getInt("nAndroids"); } }