86 votes

Comment savoir si un fragment est visible ?

J'utilise la bibliothèque de support v4 et mes questions sont les suivantes : comment savoir si un fragment est visible ? et comment puis-je modifier les propriétés de la mise en page gonflée dans le fragment ? Merci d'avance.

---Editer---

J'utilise des fragments comme dans le tutoriel des développeurs Android avec une FragmentActivity

115voto

TronicZomB Points 4865

Vous devez être en mesure de faire ce qui suit :

MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("testID");
if (test != null && test.isVisible()) {
     //DO STUFF
}
else {
    //Whatever
}

57voto

cerebro Points 1075

Les deux isVisible() y isAdded() retour true dès que le Fragment est créé et n'est même pas visible. La seule solution qui fonctionne réellement est la suivante :

if (isAdded() && isVisible() && getUserVisibleHint()) {
    // ... do your thing
}

Ceci fait l'affaire. Période.

AVIS : getUserVisibleHint() est maintenant obsolète. soyez prudent.

40voto

Kayvan N Points 3299

Si vous voulez savoir à quel moment l'utilisation regarde le fragment, vous devez utiliser

yourFragment.isResumed()

au lieu de

yourFragment.isVisible()

Tout d'abord isVisible() vérifie déjà la présence de isAdded() Il n'est donc pas nécessaire d'appeler les deux. Deuxièmement, aucun de ces deux appels ne signifie que l'utilisateur voit réellement votre fragment. Seulement isResumed() garantit que votre fragment se trouve devant l'utilisateur et que celui-ci peut interagir avec lui, si c'est ce que vous recherchez.

18voto

Cabezas Points 167

Vous pouvez essayer cette méthode :

Fragment currentFragment = getFragmentManager().findFragmentById(R.id.fragment_container);

o

Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);

Dans ce cas, vous vérifiez si currentFragment est une instance de YourFragment

if (currentFragment instanceof YourFragment) {
     Log.v(TAG, "your Fragment is Visible");
}

14voto

Mikel Points 1043

Vous pouvez remplacer setMenuVisibility comme suit :

@Override
public void setMenuVisibility(final boolean visible) {
   if (visible) {
      //Do your stuff here
   }

   super.setMenuVisibility(visible);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X