Tecla Atrás en Fragmento añadido mediante programación lleva a contenedor vacío

Tengo un problema con un diseño fragmentado y me disculpo sinceramente si se ha respondido antes y yo era demasiado tonto para encontrarlo. Busqué durante horas y no conseguí nada (bien, conseguí porciones pero nada resuelto mi problema).

Así que aquí está mi configuración: Tengo un diseño de dos paneles utilizando dos FrameLayouts como contenedores para mis fragmentos. Activity_listing.xml:

<FrameLayout android:id="@+id/listing" /> <FrameLayout android:id="@+id/details" /> 

Al abrir la aplicación (onCreate en la actividad del fragmento), un fragmento llamado Listado se agrega a FrameLayout "listing" mediante programación usando FragmentTransaction.

 public class ListingActivity extends FragmentActivity implements ListingFragment.Callbacks { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listing); // Displaying the first listing here ... Fragment fragment = new ListingFragment(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.add(R.id.listing, fragment); ft.addToBackStack(null); ft.commit(); ... } 

Este ListingFragment se reemplaza un par de veces durante el tiempo de ejecución, por lo que tengo que crearlo en lugar de definirlo en XML. He intentado este último con

 <fragment android:name="com.example.app.ListingFragment" /> 

Pero luego no se reemplazará o eliminará mediante programación más adelante. Sólo puedo añadir () y luego la antigua es visible a través de la nueva. Pero ese no es el problema aquí – sólo una explicación para mi camino.

Hasta ahora todo esto funciona como debería, Listado se crea y se muestra, etc, por lo que no hay problemas. Pero:

Cuando ListingFragment se muestra en el inicio y presiono la tecla Back, en la última posición FrameLayout "listing" se vacía en lugar de caer de nuevo a la pantalla de inicio! Me imaginé que tiene que ser porque onCreate de mi ListingActivity mostrar un marco vacío y añadir () un ListingFragment a ella. Así que la pila trasera tiene el marco vacío en ella, también. ¿Derecha?

He intentado resolver la situación por esto a ListingActivity:

 @Override public void onBackPressed() { super.onBackPressed(); if(getSupportFragmentManager().getBackStackEntryCount() == 0) { this.finish(); } } 

Pero de alguna manera eso no parece ni se siente bien … parece un mal trabajo.

¿Así que hay alguna manera de insertar el fragmento antes de la vista con el FrameLayout vacío está inflada por lo que no hay estado vacío para "volver" a? ¿O es posible eliminar el estado "vacío" de la pila trasera aunque no esté en él? Cualquier otra idea sobre cómo evitar el marco vacío después de golpear "atrás"?

¡Muchas gracias por sus esfuerzos por adelantado!

No llame a ft.addToBackStack(null) cuando agrega el fragmento en onCreate. Eso le dice al FragmentManger que tienes otro estado ANTES de ese fragmento que deseas poder volver a saltar.

  • ¿Puedo usar CollapsingToolbarLayout en un fragmento del cajón de navegación?
  • Onclicklistner no funciona en el listview de fragmentos
  • Añadir elementos a ListView - Android
  • ActionBar (Soporte) con Fragmento (soporte)
  • Cómo llamar a la actividad de otro fragmento.
  • No se puede inflar correctamente el diseño de un fragmento en la aplicación de Android
  • Fragmento crear / restaurar una vista duplicada cuando vuelva a conectar
  • Android throw InflateException binario línea de archivo xml: Error al inflar fragmento de clase
  • RecyclerView no se actualiza después de NotifyDataSetChanged (), el contenido aparece después de encender y apagar la pantalla
  • OnCreateView () en Fragment no se llama inmediatamente, incluso después de FragmentManager.executePendingTransactions ()
  • ¿Cómo: gridview dentro de un fragmento?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.