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.
- Intentar invocar método virtual 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler ()' en una referencia de objeto nulo
- Colocar ViewPager como una fila en ListView
- GetView () devuelve null
- ¿Debo reemplazar las actividades de Android por fragmentos?
- Fragmento superpuesto
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; } }
- Google PlacePicker se cierra inmediatamente después del lanzamiento
- Granularidad de administración de memoria de Android: ¿Actividad o proceso?
- Después de la rotación, onCreate () Fragmento se llama antes onCreate () FragmentActivity
- Las vistas de texto en un diseño de fragmento no cambian al llamar a SetText ()
- FindFragmentByTag () siempre devuelve null - Android
- Cómo implementar fragmento resizableable por arrastre de usuario (no animación de transición predefinida)
- Fragmentos no siempre se reemplazan cuando se utiliza el botón Atrás
- Android ViewPager: fragmentos superpuestos cuando el ancho de página se establece en 90%
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.
- ¿Cuál es la definición del valor proporcionado por la función de Android View.getHitRect ()?
- Utilizar la tarea ASYNC para cargar los pines del mapa