web-dev-qa-db-fra.com

comment obtenir un fragment ajouté dans une mise en page XML

J'ai une mise en page qui comprend un fragment comme suit:

<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" />

maintenant, je dois obtenir ce fragment et le lancer afin de pouvoir le manipuler et les mises à jour apparaissent. Comment puis-je le faire?!

EDIT: Je pense avoir réussi à obtenir le fragment, mais lorsque je modifie certaines variables, les modifications n'apparaissent pas!

65
ahmed

Vous pouvez obtenir l'instance de fragment comme suit:

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)
120
赏心悦目

Si le fragment est incorporé dans un autre fragment, vous avez besoin de getChildFragmentManager mais pas de getFragmentManager. Par exemple, dans layout XML, définissez le fragment comme suit:

<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" />

dans Code, vous pouvez obtenir l'instance de fragment comme ceci:

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

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

J'ai fait exactement la même chose dans Android et le moyen le plus simple de le faire en utilisant des interfaces. J'avais une activité avec 6 fragments et je n'avais besoin que de mettre à jour 3 d'entre eux.

Je l'utilise

    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();
        }
    }

Où, PageAdapterOfe est mon adaptateur de fragments d'activité. Je boucle tous mes fragments et cherche ceux qui implémentent mon interface, quand j'en trouve un, j'exécute la méthode définie par mon interface et c'est-à-dire!

J'utilise ce code dans l'activité qui contient tous les fragments. En réponse à un signal de diffusion, vous pouvez le placer où vous le souhaitez.

L'interface:

public interface IOfertaFragment {

    public void actualizaListaOfertas();
}
4
Francisco Hernandez

Vous pouvez trouver le fragment à l'aide de findFragmentById (si vous connaissez le composant dans lequel il est inclus) ou par findFragmentByTag (si vous connaissez sa balise).

Je ne sais pas quelles variables vous souhaitez mettre à jour, mais vous pouvez remplacer le fragment par un autre fragment à l'aide de l'API FragmentTransaction.

Voir http://developer.Android.com/guide/components/fragments.html pour des exemples.

1
Adrian G