Fragmento reemplazado aún visible

Cuando inicio mi aplicación, ejecuta un AsyncTask para cargar y luego en onPostExecute , entonces setContentView a la nueva distribución, a continuación, agregue un fragmento con dos botones que ofrecen dos modos por un add FragmentTransaction . Después de hacer clic en uno de los dos modos, reemplaza el fragmento con otro FragmentTransaction utilizando el método replace.

Si la aplicación se bloquea vuelve a la primera pantalla, cargando los dos botones que ofrecen los dos modos. En este caso, si se selecciona cualquiera de los dos modos, se carga el segundo fragmento, pero ahora el fondo es repentinamente transparente, mostrando los dos botones que se muestran a continuación y permanecen clicables. Si se hace clic nuevamente reemplazan correctamente el fragmento para que no se vea a continuación. Esto es simplemente raro, no puedo entender lo que podría causar esto.

He investigado y visto estas dos preguntas similares, una y dos , lo que sugiere que podría ser porque el ID es incorrecto o he definido el fragmento en XML. Ninguno de estos dos factores es el caso.

Mi código se muestra a continuación:

Abajo reemplazo la pantalla de carga.

 @Override protected void onPostExecute(Void result) { setContentView(R.layout.activity_main_screen); FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.add(R.id.fragment_container, new ModeFragment()) .commit(); } 

Después de lo cual, cuando se hace clic en un botón, paso el fragmento con el que deseo reemplazar la corriente por este método:

 private void replaceCurrentFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.replace(R.id.fragment_container, fragment) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .addToBackStack(null).commit(); } 

Esto funciona la primera vez, sin embargo, si se produce un accidente, la aplicación vuelve al primer fragmento y la segunda vez que pasa este método, el nuevo fragmento de reemplazo es semi-invisible. Al hacer clic en el botón del primer fragmento, vuelve a llamar a este método y ahora está bien.

Obviamente no quiero que la aplicación se bloquee por lo que no debería ocurrir, pero tengo la sensación de que hay algo mal con la forma en que estoy escribiendo mi código.

He tenido el mismo problema que me sucede, y fue porque cargué un fragmento en el OnCreate de mi actividad, sin comprobar si había un savedInstanceState, por lo que android primero reabrir todos los fragmentos antiguos, a continuación, hacer el OnCreate, que agregó el Fragmento sobre los antiguos sin reemplazarlos así que cuando navegas a otro fragmento, sólo reemplaza el superior, pero no el inferior, por lo que verá los fragmentos en el mismo.

Puede que no sea exactamente la misma cosa para ti, pero podría ayudarte a resolverlo.

  • Mi fragmento no se puede transmitir a android.support.v4.app.Fragment
  • Android: ¿Puedes anidar Fragmentos?
  • Cambio de orientación con viewPager dentro de FragmentActivity
  • YouTubePlayerFragment dentro de ReyclerView
  • Listview conjunto adaptador fragmento nullpointerexception
  • Cómo reemplazar LongPress en ListFragment?
  • Patrón de diseño para fragmentos en android
  • Reutilizando fragmentos en un fragmento
  • OptionsMenu de Fragmentos anidados dentro de ViewPager
  • Iniciar animación cuando el fragmento es visible en ViewPager
  • reproducir la vista del fragmento a través del botón
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.