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!
赏心悦目
Puede obtener la instancia del fragmento de la siguiente manera:
getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)
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)
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