SavedInstanceState siempre es nulo en fragmento
Tengo un fragmento adjunto a la actividad usando XML (y setContentView () en actividad). A tienen un problema porque tengo vistas muy dinámicas en mi fragmento, así que cuando los cambios de orientación debo restaurar todos los estados de las opiniones.
Tengo problema porque estoy usando algo como eso:
- Liberación de 2 aplicaciones basadas en el mismo código pero nombre de paquete diferente
- Error al importar los paquetes
- ¿Cómo serializar un paquete?
- Android.os.BadParcelableException: ClassNotFoundException cuando unmarshalling: exception
- ClassCastException al recuperar datos del paquete en Android
public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("restore", true); outState.putInt("nAndroids", 2); }
Pero después de cambiar la orientación cuando se llaman métodos con param Bundle savedInstanceState (como onCreateView etc) mi savedInstanceState siempre es nulo.
No soy un noob en el Android, pero ahora estoy muy enojado debido a 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)); }
- ¿Qué herramientas existen que ofrecen protección apk para android (contra la inversión y el reenvasado)?
- Error al ejecutar zipalign
- SavedInstanceState al restaurar el fragmento de la pila trasera
- ¿Cómo se pasan las imágenes (mapas de bits) entre las actividades de androide mediante bundles?
- Android Library Package perdió el nombre de los parámetros de las interfaces internas
- Android: eliminar automáticamente las imágenes no utilizadas del conjunto de proyectos
- Cómo guardar y restaurar el estado de la vista android
- ¿Un objeto serializable siempre se serializa cuando se pone en un paquete?
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. Así que chicos, recuerden – cada instancia de fragmento necesita identificador único o etiqueta!
Además, cuando se declara setRetainInstance (true), entonces bundle siempre debe devolver null.
Tuve un problema similar en el que siempre estaba consiguiendo savedInstanceState como null a pesar de suministrar 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 un
Bundle bundle = this.getArguments();
In 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 Actividad: –
Cuando inicie su aplicación, en onCreate
, su objeto de paquete es nulo, por lo que tiene que poner un cheque como a continuación y cuando gire la pantalla a continuación, onSaveInstance
se llama y se inicializa el objeto de paquete
@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"); } }
Ok, sé que este es un viejo post, pero no pude encontrar la respuesta correcta para mí aquí ni muchos otros lugares, así que estoy publicando cómo arreglé mi caso.
Así que mi fragmento está dentro de una actividad. Y en un principio intenté guardar Bundle sólo en Fragment y recuperarlo en onCreateView. Sin embargo, ese fue el problema.
Fijé esto iniciando el objeto del myFragment en actividad y poner ese objeto al paquete de la actividad en onSaveInstanceState (). Luego lo recuperó en onRestoreInstanceState (). Utilicé getSupportFragmentManager (). PutFragment / getFragment. Entonces el saveInstanceState en el fragmento ya no es nulo.
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 de nohistory
en AndroidManifest.xml
o nohistory
en false .
<activity android:noHistory="false">
- ¿Cómo rebajar el ADT de Android?
- Deshabilitar evento de clic en los elementos de lista de reproducción de Android