web-dev-qa-db-fra.com

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. Le seul moyen de définir une balise Fragment que j'ai trouvée consiste à effectuer une opération FragmentTransaction et à lui attribuer un nom de balise en tant que paramètre.

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

133
Axel M. Garcia

Oui. Ainsi, 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 en examinant les sources de compatibilité et en cherchant brièvement des similitudes à un moment donné dans le passé.

114
PJL

Vous pouvez définir le tag pour fragmenter de cette manière:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 
69
David

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

"Fournissez l'attribut Android: tag avec une chaîne unique."

de la même manière que vous attribuez un identifiant dans une mise en page XML.

    Android:tag="unique_tag"

lien vers le guide du développeur

32
Kuool

Vous pouvez également obtenir tous les fragments comme ceci:

Pour les parfums v4

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

pour app.fragment

List<Fragment> allFragments = getFragmentManager().getFragments();
4
Chris Fremgen

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

-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 à la sectionPagerAdapter, définissez la balise comme suit:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);
0
Th3Wolf

C'est le meilleur moyen que j'ai trouvé:

   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