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
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);
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);