Fragmento reemplazado todavía visible en el fondo
Estoy intentando reemplazar un fragmento con otro usando un nuevo patrón de cajón de navegación. Parece que funciona, pero cuando elijo otra opción de cajón el nuevo fragmento se carga, pero ambos fragmentos son visibles. No estoy usando el diseño estático del fragmento así que no sé dónde está el problema.
Los fragmentos se cargan a través del método AdapterView.OnItemClickListener
implementando AdapterView.OnItemClickListener
en mi actividad.
- Enganchar en el ciclo de vida del fragmento como Application.ActivityLifecycleCallbacks
- Error: (124, 62) error: tipos incompatibles: La clase no se puede convertir en Contexto
- GetFragmentManager.findFragmentByTag () devuelve null
- Los fragmentos de Android deben estar estáticos
- ¿Cuál es el ciclo de vida de un fragmento cuando se llama replace ()?
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragmentToShow = null; // Load desired fragment switch (position) { case 0: // Authors if (fragmentAuthors == null) fragmentAuthors = new FragmentAuthors(); fragmentToShow = fragmentAuthors; break; case 1: // Books if (fragmentBooks == null) fragmentBooks = new FragmentBooks(); fragmentToShow = fragmentBooks; break; } FragmentTransaction ft = fragmentManager.beginTransaction(); ft.replace(R.id.ActivityMain_Drawer_FrameMain, fragmentToShow); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); mDrawerLayout.closeDrawers(); }
Diseño
<!-- The main content view --> <FrameLayout android:id="@+id/ActivityMain_Drawer_FrameMain" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_light" /> <!-- The navigation drawer --> <FrameLayout android:id="@+id/ActivityMain_Drawer_FrameMenu" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/background_light"> <ListView android:id="@+id/ActivityMain_Drawer_FrameMenu_List" android:layout_width="match_parent" android:layout_height="match_parent" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </FrameLayout>
Capturas de pantalla
Https://dl.dropboxusercontent.com/u/1763308/Screenshots/device-2013-05-27-113128.png https://dl.dropboxusercontent.com/u/1763308/Screenshots/device-2013-05-27 -113139.png
- Listfragment ejemplo simple
- Cómo acceder a la vista de actividad de los padres en el fragmento
- Cómo llamar al método dentro del fragmento de la actividad donde el fragmento se creó dinámicamente
- ¿Cómo pasar de un fragmento a otro fragmento al hacer clic en un ImageView en Android?
- Obtener el contexto de aplicación en fragmento en Android?
- Ya administra un GoogleApiClient con id 0 En FRAGMENT
- Fragmento no recibir devoluciones de llamada de menú
- ¿Por qué onResume () se llama en fragmentos ocultos?
Tengo el mismo problema con algunos fragmentos. Para solucionarlo, configuro el color de fondo simple para todos los diseños de fragmentos, por ejemplo:
android:background="?android:attr/colorBackground"
He intentado un montón de respuestas sugeridas aquí en SO y después de pasar horas, finalmente podría resolver mi problema sin tener que especificar un color de fondo en el diseño de mi fragmento.
Mi solución es anular el método onBackPressed en la actividad que sostiene el contenedor de fragmentos, por lo que cada vez que se presione el botón de retroceso, quitaré el fragmento mostrado en la pantalla y volveré el anterior:
@Override public void onBackPressed() { List<Fragment> fragments = getSupportFragmentManager().getFragments(); if (fragments.size() > 1) { final Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.my_framelayout); if (currentFragment != null) { getSupportFragmentManager().beginTransaction().remove(currentFragment).commit(); getSupportFragmentManager().popBackStack(); } } else { super.onBackPressed(); } }
Espero que esto ayude.
Intente cambiar el color de androide: background = "@ android: color / background_light" a algún otro color. Puede ser esto soluciona su problema.
- Revertir la animación realizada con AnimatorSet
- Android, TelephonyManager, las alegrías de PhoneStateListener y los números entrantes