Fragmentos Detatch / Reattach Vs Mostrar / Ocultar

Tengo problemas para averiguar la forma correcta de navegar a través de fragmentos sin un buscapersonas y tengo problemas durante los cambios de configuración para la orientación de la pantalla. Estoy utilizando Show / Hide en los fragmentos para que sean visibles y funcionales, pero me pregunto si debo usar Detach / Attach. También estoy teniendo problemas para añadir cosas a la pila de atrás y creo que es también debido al uso de mostrar / ocultar. ¿Es mejor usar Attach / detatch o hay una forma de anular lo que hace el botón back para hacer que muestre / ocultar el fragmento último / actual.

El Comportamiento: Tengo un fragmento de mapa y un fragmento List junto con algunos otros. Todo arranca correctamente y funciona inicialmente con cambios de orientación. Cuando navego a la vista de lista, se rellena correctamente, pero al cambiar la orientación, la lista se vuelve a dibujar sin los Datos en ella. La vista de mapa también se vuelve a dibujar y es visible detrás de mi indicador de título de buscapersonas. Si alguien pudiera por favor me apunta en la dirección correcta para resolver esto que sería impresionante. Estoy sospechando que es es causado por la forma en que estoy mostrando y ocultando los fragmentos.

Aquí es donde crear los fragmentos y agregarlos al administrador de fragmentos. También he mostrado donde muestro / ocultar fragmentos.

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map_frags); mapViewContainer = LayoutInflater.from(this) .inflate(R.layout.map, null); setupFragments(); showFragment(0); } public void setListData(String name) { bName = name; showFragment(1); } private void setupFragments() { final FragmentManager fm = getSupportFragmentManager(); final FragmentTransaction ft = fm.beginTransaction(); mFragment1 = fm.findFragmentByTag("f1"); if (mFragment1 == null) { mFragment1 = new MenuFragment(); ft.add(mFragment1, "f1"); ft.hide(mFragment1); } mMapFragment = (MapFragment) getSupportFragmentManager() .findFragmentByTag(MapFragment.TAG); if (mMapFragment == null) { mMapFragment = MapFragment.newInstance(0); ft.add(R.id.fragment_container, mMapFragment, MapFragment.TAG); } ft.hide(mMapFragment); myListFragment = (ListFrag) getSupportFragmentManager() .findFragmentByTag(ListFrag.TAG); if (myListFragment == null) { myListFragment = new ListFrag(); ft.add(R.id.fragment_container, myListFragment, ListFrag.TAG); } ft.hide(myListFragment); frag = (frag) getSupportFragmentManager().findFragmentByTag( frag.TAG); if (frag == null) { bacFrag = new frag(); ft.add(R.id.fragment_container, frag, frag.TAG); } ft.hide(bacFrag); ft.commit(); } public void showFragment(int fragIn) { final FragmentTransaction ft = getSupportFragmentManager() .beginTransaction(); ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); if (mVisible != null) { if (mVisible == mListFragment) { ft.remove(mListFragment); } else { ft.hide(mVisible); } } switch (fragIn) { case 0: ft.show(mMapFragment); ft.commit(); mVisible = mMapFragment; break; case 1: mListFragment = (ListFragmentDisplay) getSupportFragmentManager() .findFragmentByTag(ListFragmentDisplay.TAG); Toast.makeText(this, "startListFrag", Toast.LENGTH_LONG).show(); if (mListFragment == null) { mListFragment = new ListFragmentDisplay(); ft.add(R.id.fragment_container, mListFragment, ListFragmentDisplay.TAG); } ft.show(mListFragment).commit(); mVisible = mListFragment; break; case 2: ft.show(myfragment).commit(); mVisible = myfragment; break; case 3: ft.show(frag).commit(); mVisible = frag; break; } } 

No es tu culpa. El problema es que cuando la orientación cambia toda la actividad se destruye, incluso todos los fragmentos añadidos. Por lo tanto, ninguno de los datos que contiene se conserva. No se recomienda usar android:configChanges="orientation|keyboardHidden" . Más bien, establezca para cada fragmento setRetainInstance(true) y funcionará bien con su código actual.

Si desea tener una mejor persistencia (por ejemplo, cuando la actividad se destruye temporalmente para los problemas de espacio) también recuerde guardar el estado de sus fragmentos con onSaveInstanceState . setRetainInstance sólo funcionará cuando se setRetainInstance un cambio de configuración.

  • Los elementos de la barra de acciones se duplican
  • Tabs + ViewPager + FragmentStatePagerAdapter - ¿Cómo eliminar el fragmento?
  • Método de llamada desde Fragmento en ViewPager
  • ¿Cómo agregar un fragmento a un diseño generado mediante programa?
  • Terminando un fragmento
  • CoordinatorLayout reemplazando Fragments
  • Elemento de Recyclerview efecto de ondulación de clic
  • Android FragmentTabHost: No se conoce ninguna pestaña null
  • Bauerca drag-sort-listview ejemplo sencillo
  • ¿Cómo puedo recrear un fragmento?
  • ¿Cómo cambiar la actividad en el botón de navegación inferior?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.