cómo agregar un fragmento en un diseño XML

3 minutos de lectura

Tengo un diseño que incluye un fragmento de la siguiente manera:

<fragment
        android:id="@+id/mainImagesList"
        android:name="com.guc.project.ImagesList"
        android:layout_width="match_parent"
        android:layout_height="62dp"
        android:layout_below="@+id/addimagebutton"
        android:layout_weight="1"
        android:paddingTop="55dp" />

ahora, necesito obtener este fragmento y lanzarlo para poder manipularlo y que aparezcan las actualizaciones. Como lo puedo hacer ?!

EDITAR: creo que logré obtener el fragmento, pero cuando cambio algunas variables, ¡los cambios no aparecen!

  • Si los cambios no aparecen, intente llamar invalidar() en su vista para volver a dibujar cualquier cambio.

    – Tom Leese

    17 de diciembre de 2012 a las 9:24


avatar de usuario
赏心悦目

Puede obtener la instancia del fragmento de la siguiente manera:

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)

avatar de usuario
ldehai

Si el fragmento está incrustado en otro fragmento, necesita getChildFragmentManager() pero no getFragmentManager(). Por ejemplo, en el diseño xml defina el fragmento así:

<fragment 
    android:name="com.aventlabs.ChatFragment"
    android:id="@+id/chatfragment"
    android:background="#ffffff"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:layout_marginTop="50dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp" />

en Código, puede obtener la instancia de fragmento de esta manera:

FragmentManager f = getChildFragmentManager();
FragmentTransaction transaction = f.beginTransaction();
chatFragment = f.findFragmentById(R.id.chatfragment);

if (chatFragment != null) {
   transaction.hide(chatFragment);
}
transaction.commit();

  • getChildFragmentManager() lo hizo como si hubiera anidado un fragmento, gracias hermano

    – Mrinmoy

    4 de agosto de 2017 a las 12:37

  • Mi fragmento está incrustado en el archivo de diseño xml que carga el fragmento principal. getChildFragmentManager funcionó para mí mientras que getFragmentManager no. ¡Gracias!

    – El Zapper

    24 de julio de 2018 a las 13:15


Hice exactamente lo mismo en Android y la forma más sencilla de hacerlo es usar interfaces. Tenía una actividad con 6 fragmentos y necesitaba actualizar solo 3 de ellos.

yo uso esto

    final Integer numeroFragments = ((PagerAdapterOfe) mViewPager.getAdapter()).getCount();

    for (int i=0; i<numeroFragments; i++) {
        Object fragment = ((PagerAdapterOfe) mViewPager.getAdapter()).getItem(i);

        // If the fragment implement my interface, update the list
        if (fragment instanceof IOfertaFragment){
        ((IOfertaFragment) fragment).actualizaListaOfertas();
        }
    }

Donde, PageAdapterOfe es mi adaptador de fragmentos de actividad. Recorro todos mis fragmentos y busco aquellos que implementan mi interfaz, cuando encuentro uno, ejecuto el método definido por mi interfaz y ¡eso es!

Uso este código dentro de la actividad que contiene todos los fragmentos, en respuesta a una señal de transmisión, puede colocarlo donde lo necesite.

La interfaz:

public interface IOfertaFragment {

    public void actualizaListaOfertas();
}

  • Esto funciona, pero para estar seguro, debe usar etiquetas de fragmentos en lugar de bucles.

    – A. Steenbergen

    20 de febrero de 2015 a las 21:08

Puede encontrar el fragmento utilizando findFragmentById (si conoce el componente en el que está incluido) o findFragmentByTag (si conoce su etiqueta)

No sé qué variables desea actualizar, pero puede reemplazar el fragmento con otro fragmento mediante la API de FragmentTransaction.

Ver http://developer.android.com/guide/components/fragments.html por ejemplo.

Si se incluye Fragmento dentro del archivo de diseño de Actividad entonces puede ser referenciado por SupportFragmentManager como…

MyFragment myFragment= (MyFragment)getSupportFragmentManager().findFragmentById(R.id.FRAGMENTID)

Si Fragment se incluye dentro del archivo de diseño de otro Fragmento entonces puede ser referenciado por ChildFragmentManager como…

 MyFragment myFragment= (MyFragment)getChildFragmentManager().findFragmentById(R.id.FRAGMENTID)

¿Ha sido útil esta solución?