Comment définir une balise Fragment par code?

Je n'ai pas trouvé quelque chose comme la méthode setTag(String tagName) dans la classe Fragment. La seule façon de définir une balise Fragment que j'ai trouvée est de faire un FragmentTransaction et de passer un nom de balise en paramètre.

Est-ce la seule façon de définir explicitement une Fragment balise code?

124
demandé sur Macarse 2011-06-16 19:12:45

7 réponses

Oui. Donc, le seul moyen est au moment de la transaction, par exemple en utilisant add, replace, ou dans le cadre de la mise en page.

J'ai déterminé cela à travers un examen des sources de compatibilité que j'ai brièvement cherché similaire à un moment donné dans le passé.

105
répondu PJL 2011-06-17 07:29:55

Vous pouvez définir tag sur fragment de cette façon:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 
65
répondu David 2013-09-24 22:16:08

Vous pouvez fournir une balise dans votre fichier XML de mise en page d'activité.

"fournissez l'attribut android:tag avec une chaîne unique."

Tout comme vous attribuez id dans une mise en page xml.

    android:tag="unique_tag"

Lien vers guide du développeur

29
répondu Kuool 2012-08-14 03:48:39

Vous pouvez également obtenir tous les fragments comme ceci:

Pour les fragments v4

List<Fragment> allFragments = getSupportFragmentManager().getFragments();

Pour app.fragment

List<Fragment> allFragments = getFragmentManager().getFragments();
3
répondu Chris Fremgen 2016-09-28 11:57:59

Je sais que cela fait 6 ans, mais si quelqu'un est confronté au même problème, faites comme je l'ai fait:

- Créer une classe Fragment personnalisée avec un champ de balise:

public class MyFragment extends Fragment {
 private String _myTag;
 public void setMyTag(String value)
 {
   if("".equals(value))
     return;
   _myTag = value;
 }
 //other code goes here
}

- avant d'ajouter le fragment au sectionPagerAdapter définissez la balise comme ceci:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);
1
répondu Th3Wolf 2018-02-25 15:54:05

C'est la meilleure façon que j'ai trouvée:

public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null) {
      // Let's first dynamically add a fragment into a frame container
      getSupportFragmentManager().beginTransaction(). 
          replace(R.id.flContainer, new DemoFragment(), "SOMETAG").
          commit();
      // Now later we can lookup the fragment by tag
      DemoFragment fragmentDemo = (DemoFragment) 
          getSupportFragmentManager().findFragmentByTag("SOMETAG");
    }
}

}

0
répondu Kingsley Mitchell 2018-05-29 00:10:37

Vous pouvez ajouter la balise en tant que propriété pour les arguments Fragment. Il sera automatiquement restauré si le fragment est détruit puis recréé par le système d'exploitation .

Exemple:-

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);
-17
répondu farid_z 2016-09-28 14:14:16