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?
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é.
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();
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"
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();
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);
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");
}
}
}