Agregue dinámicamente fragmento en fragmento
No he sido capaz de encontrar una forma de cómo añadir dinámicamente fragmento en fragmento añadido dinámicamente existente. ¿Sabes, si es posible?
Estoy generando fragmentos de esta manera:
- Android Pull-to-Refresh con Fragmento ListView y Adaptador ListView personalizado
- ¿Cómo puedo acceder a getSupportFragmentManager () en un fragmento?
- ¿Cómo puedo deshabilitar hacer clic en TabLayout en Android
- ¿Qué está mal con este código para usar ViewPager?
- ¿OnDestroy () está garantizado para ser llamado Fragments?
FragmentManager fragMgr = getSupportFragmentManager(); FragmentTransaction xact = fragMgr.beginTransaction(); if(null == fragMgr.findFragmentByTag(FRAG1_TAG)) { xact.add(10101010, new DateTime(), FRAG1_TAG); } if(null == fragMgr.findFragmentByTag(FRAG4_TAG)) { xact.add(7777, new loginForm(), FRAG4_TAG); } xact.commit();
¿Cómo agregar FRAG4_TAG fragmento otro?
Edit2:
I codificado duro es id poder trabajar con él en futuro (donde ll es mi linearLayout en XML):
FrameLayout frml4 = (FrameLayout)inflater.inflate(R.layout.frame,null); frml4.setId(7777); frml4.setBackgroundColor(Color.YELLOW); ll.addView(frml4);
- Activar / desactivar Android ActionBar.Tab
- Tablas de ActionBar con la biblioteca de soporte
- Programe agregar fragmentos a viewgroup
- Contexto en un fragmento de preferencia
- Android: Cambiar los elementos del menú ActionBar del fragmento
- Cómo reemplazar un DialogFragment por otro DialogFragment?
- ¿Cómo ocultar el teclado suave desde el interior de un fragmento?
- Animar la transición de fragmentos cuando se cargan fragmentos de XML
Asumo que el problema que usted está funcionando en es que no hay una opinión inflada para agregar el fragmento a porque el fragmento original, FRAG4_TAG, no se ha inflado antes de que usted está intentando agregarlo.
Puede transmitir suficiente información a FRAG4_TAG en los Argumentos para que sepa que debe crear y agregar un fragmento (o lo que todos los fragmentos que necesita que tenga) a sí mismo durante su onCreateView, después de que la vista se ha inflado …
El diseño de la actividad …
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="MyActivity"/> <LinearLayout android:orientation="vertical" android:id="@+id/main_frag_container" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
La actividad…
public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); Fragment fragOne = new MyFragment(); Bundle arguments = new Bundle(); arguments.putBoolean("shouldYouCreateAChildFragment", true); fragOne.setArguments(arguments); ft.add(R.id.main_frag_container, fragOne); ft.commit(); } }
El diseño del fragmento …
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="20dp"> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Some fragment"/> <LinearLayout android:orientation="vertical" android:id="@+id/frag_container" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
El fragmento …
public class MyFragment extends Fragment { @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.frag_layout, container, false); boolean shouldCreateChild = getArguments().getBoolean("shouldYouCreateAChildFragment"); if (shouldCreateChild) { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); fm.beginTransaction(); Fragment fragTwo = new MyFragment(); Bundle arguments = new Bundle(); arguments.putBoolean("shouldYouCreateAChildFragment", false); fragTwo.setArguments(arguments); ft.add(R.id.frag_container, fragTwo); ft.commit(); } return layout; } }
Este ejemplo cubre el caso en el que necesita agregar dinámicamente fragmentos a un fragmento que NO HA ya sido inflado y agregado a la jerarquía. La adición de un fragmento a un fragmento que ya ha sido inflado y agregado a la jerarquía es tan simple como especificar el contenedor de fragmentos de destino que desea agregar a ID como lo haría normalmente.
Como la documentación indica "Un fragmento debe estar siempre incrustado en una actividad". Así que cuando agregas un "sub-fragmento" siempre pertenecerá a la actividad incluso si la agregas dentro de tu clase de fragmento. Por ejemplo, si posteriormente decide retirar el fragmento que lo contiene, los fragmentos secundarios no se eliminarán automáticamente. Cuando tuve que hacer lo mismo tuve que almacenar en un vector los sub fragmentos y eliminarlos manualmente en los métodos onDestroy de mi fragmento de contenedor.
Creo que los fragmentos no se piensa para ser utilizado como este
No puede insertar Fragmentos en otros fragmentos. (Al menos no todavía)
Sin embargo, puede reemplazar Fragmentos con otros fragmentos con FragmentTransaction.replace(containerViewId, Fragment)
.
- Cambiar las ubicaciones de salida de ndk-build
- Cómo crear mediante programación el diseño de un fragmento?