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?
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é.
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();
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"
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();
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
Fragmentpersonnalisé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
sectionPagerAdapterdéfinissez la balise comme ceci:
MyFragment mfrag= new MyFragment();
mfrag.setMyTag("TAG_GOES_HERE");
sectionPagerAdapter.AddFragment(mfrag);
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");
}
}
}
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);