Sustitución de un fragmento por otro fragmento dentro del grupo de actividad

Tengo un fragmento dentro de una actividad de grupo y quiero reemplazarlo por otro fragmento:

FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); SectionDescriptionFragment bdf = new SectionDescriptionFragment(); ft.replace(R.id.book_description_fragment, bdf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); 

Funciona muy bien cuando se hace como un proyecto separado sin usar el grupo de actividades, todo funciona bien en log cat como control dentro de getview (), pero ninguna vista es visible, ni siquiera surge ninguna excepción, quiero que el fragmento de detalle del libro Ser reemplazado por fragmento de detalle de sección.

Xml del fragmento de detalle del libro tiene id book_description_fragment y xml para el fragmento de descripción de sección tiene id section_description_fragment.

El código anterior está en el método onClick de un elemento, quiero que cuando el usuario toque en un elemento en la vista de desplazamiento horizontal, a continuación, el fragmento cambia.

Los fragmentos codificados en XML no pueden ser reemplazados. Si necesita reemplazar un fragmento por otro, debería haberlo añadido dinámicamente, en primer lugar.

 // Create new fragment and transaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack if needed transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

Por favor vea esta pregunta

Sólo puede reemplazar un " fragmento agregado dinámicamente ".

Por lo tanto, si desea agregar un fragmento dinámico, consulte este ejemplo.

Utilice el siguiente código en android.support.v4

  FragmentTransaction ft1 = getFragmentManager().beginTransaction(); WebViewFragment w1 = new WebViewFragment(); w1.init(linkData.getLink()); ft1.addToBackStack(linkData.getName()); ft1.replace(R.id.listFragment, w1); ft1.commit(); 

He hecho una idea con el método perfecto para gestionar el reemplazo de fragmentos y el ciclo de vida .

Solo reemplaza el fragmento actual por uno nuevo, si no es el mismo y si no está en backstack (en este caso lo hará pop).

Contiene varias opciones como si quisiera guardar el fragmento en backstack.

=> Ver lo esencial aquí

Usando esto y una sola actividad, puede agregar esto a su actividad:

 @Override public void onBackPressed() { int fragments = getSupportFragmentManager().getBackStackEntryCount(); if (fragments == 1) { finish(); return; } super.onBackPressed(); } 

Utilice este código utilizando v4

  ExampleFragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack so the user can navigate back transaction.replace(R.id.container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

Espero que estés haciendo well.when comencé a trabajar con Android Fragments entonces también estaba teniendo el mismo problema, entonces leí sobre 1- Cómo cambiar el fragmento con otros. 2- Cómo agregar el fragmento si el Fragment container no tiene ningún fragmento.

Después de un cierto R & D, creé una función que me ayude en muchos proyectos hasta ahora y todavía estoy usando esta función simple.

 public void switchFragment(BaseFragment baseFragment) { try { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); if (getSupportFragmentManager().findFragmentById(R.id.home_frame) == null) { ft.add(R.id.home_frame, baseFragment); } else { ft.replace(R.id.home_frame, baseFragment); } ft.addToBackStack(null); ft.commit(); } catch (Exception e) { e.printStackTrace(); } } 

Disfruta tu tiempo de código

  • ¿Cómo uso las preferencias de los fragmentos con ViewPager?
  • Obtener todos los fragmentos de backstack en orden
  • ¿Cuántas actividades vs fragmentos?
  • ¿Qué hacer con ListActivity / MapActivity al convertir a Fragments usando la biblioteca de compatibilidad?
  • DatePickerDialog onDateSet llamado cuando se gira
  • ¿Cómo acceder a un elemento de interfaz de usuario en un fragmento?
  • FragmentStatePagerAdapter onPageSelected evento
  • ¿Por qué el teclado virtual de Android no responde a EditText?
  • Android Espresso: ¿Cómo puedo probar un Fragmento específico al seguir una actividad a varios fragmentos de arquitectura
  • ¿Cómo resalto el texto buscado en mi filtro de búsqueda?
  • Uso de las clases Fragment y AppCompatActivity juntos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.