179 votes

Obtenez l’objet actuel de fragment

Dans mon main.xml j'ai

  <FrameLayout
            android:id="@+id/frameTitle"
            android:padding="5dp"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:background="@drawable/title_bg">
                <fragment
            android:name="com.fragment.TitleFragment"
            android:id="@+id/fragmentTag"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        </FrameLayout>

Et je suis fragment d'un objet comme ça

            FragmentManager fragmentManager = activity.getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        Fragment newFragment = new FragmentType1();
        fragmentTransaction.replace(R.id.frameTitle, casinodetailFragment, "fragmentTag");

        // fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();

C'est le réglage de différents types de Fragment objets (FragmentType2,FragmentType3,...) à différents temps.
Maintenant, à un certain moment j'ai besoin d'identifier l'objet qui est actuellement

Dans le coup j'ai besoin de faire comme ceci

Fragment currentFragment = //what is the way to get current fragment object in FrameLayout R.id.frameTitle

Edit: j'ai essayé les

TitleFragment titleFragmentById = (TitleFragment) fragmentManager.findFragmentById(R.id.frameTitle);

et

    TitleFragment titleFragmentByTag = (TitleFragment) fragmentManager.findFragmentByTag("fragmentTag");

Mais les objets (titleFragmentById et titleFragmentByTag ) null
Ai-je raté quelque chose?
Je suis à l'aide d' Compatibility Package, r3 et développement de API level 7

EDIT 2:
findFragmentById() et findFragmentByTag() ne fonctionnera que si nous avons mis fragment à l'aide de fragmentTransaction.replace ou fragmentTransaction.add, mais sera - return null si nous avons mis l'objet en xml (comme ce que j'ai fait dans ma main.xml).
Je pense que j' miss something de mon xml

262voto

CommonsWare Points 402670
<blockquote> <p>Maintenant, à un moment donné, j’ai besoin d’identifier quel objet est-il actuellement</p> <p>Appelez <code></code> sur <code></code> et déterminer quel fragment se trouve dans votre <code></code> conteneur.</p></blockquote>

37voto

Hede Hodo Points 209

Je pense que vous pouvez utiliser onAttachFragment événement peut-être être utile pour attraper les fragment est actif.

13voto

Niqo Points 442

Je pense que vous devriez faire :

La raison est que vous définissez la balise « fragmentTag » pour le dernier fragment que vous avez ajouté (lorsque vous avez appelé à remplacer).

9voto

Ahmad Ali Nasir Points 563

Il pourrait être en retard, mais j’espère que cela aide quelqu'un d’autre, aussi @CommonsWare a posté la bonne réponse.

4voto

Joy Points 902

Je sais que ça fait un moment, mais je vais le dire ici au cas où cela aiderait quelqu'un.

La bonne réponse est de loin (et celle sélectionnée) celle de CommonsWare. J'avais le même problème que posté, le suivant

 MyFragmentClass fragmentList = 
            (MyFragmentClass) getSupportFragmentManager().findFragmentById(R.id.fragementID);
 

continué à retourner null. Mon erreur était vraiment stupide, dans mon fichier XML:

 <fragment
    android:tag="@+id/fragementID"
    android:name="com.sf.lidgit_android.content.MyFragmentClass"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>
 

L'erreur était que j'avais Android: tag au lieu de android: id .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X