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.
- Android TabLayout no muestra contenido tan pronto como el fragmento se cambia
- RecyclerView no llama aCreateViewHolder o onBindView
- Cambiar programaticamente el color de la forma en la lista de capas
- ¿Cómo enviar datos de una actividad a su fragmento padre?
- El método getLayoutInflater (Bundle) en el tipo Fragmento no es aplicable para los argumentos ()
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.
- OnActivityResult () no se llama en el nuevo API de fragmentos anidados
- Lógica para usar varias vistas web en TabLayout para manejar problemas de memoria
- Los fragmentos de ViewPager no se recrean después de FragmentTransaction.replace () seguido por el botón de retroceso
- Android - ¿Cómo puedo "iniciar" o "inicializar" un Fragmento de una actividad?
- Diferencia entre add (), replace () y addToBackStack ()
- Cómo llamar a getFragmentManager en Recycler.Adapter?
- Uso de android Inflate fuera de onCreateView
- Añadiendo a Fragmento ArrayAdapter de Activity AlertDialog
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
- Java.util.zip.ZipException: entrada duplicada durante packageAllDebugClassesForMultiDex
- SQLite de Android: Actualización