65 votes

Détecter le changement d'onglet ViewPager à l'intérieur d'un Fragment

Je dispose d'un ViewPager avec plusieurs fragments. Dans l'un des Fragments, je joue de l'audio. Lorsque je passe à un autre fragment, je veux arrêter la lecture de l'audio. Comment puis-je détecter que l'autre fragment est désormais visible dans le ViewPager ?

J'ai essayé de remplacer les méthodes onStop et onHiddenChanged. Sans succès. Il doit y avoir une méthode du type "vous n'êtes plus actif" à remplacer. Non ?

138voto

louielouie Points 5615

J'ai creusé un peu et il s'avère que ViewPager appellera à la fois: setUserVisibleHint et setMenuVisibility. Je remplacerais setUserVisibleHint puisque la documentation pour setUserVisibleHint indique :

Définissez un indice au système pour indiquer si l'interface utilisateur de ce fragment est actuellement visible pour l'utilisateur. Cet indice est par défaut vrai et est permanent à travers l'état de sauvegarde et de restauration de l'instance du fragment. Une application peut définir ceci sur false pour indiquer que l'interface utilisateur du fragment est déroulée hors visibilité ou n'est pas directement visible pour l'utilisateur. Ceci peut être utilisé par le système pour prioriser des opérations telles que les mises à jour du cycle de vie des fragments ou le comportement de l'ordonnancement des chargeurs.

Essayez de mettre ce code dans votre fragment :

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    // Assurez-vous que nous sommes actuellement visibles
    if (this.isVisible()) {
        // Si nous devenons invisibles, alors...
        if (!isVisibleToUser) {
            Log.d("MyFragment", "Plus visible. Arrêt de la lecture audio.");
            // TODO arrêter la lecture audio
        }
    }
}

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