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.

 @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

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.

  • ¿Cómo obtener el ancho del fragmento?
  • Diferencia entre fragmentTransaction.add y fragmentTransaction.replace
  • Comunicación Fragmento-Fragmento en Android
  • Android.content.Context.getPackageName () 'en una referencia de objeto nulo
  • Mejores prácticas de Android para las comunicaciones Fragmento a Actividad
  • Cómo inflar la vista dentro del fragmento
  • Cómo restaurar el estado de vista de fragmentos de Android
  • Correcta / mejor manera de manejar el problema de la transacción de fragmentos Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.