83 votes

FragmentStatePagerAdapter est déprécié de l'API 27.

FragmentStatePagerAdapter est déprécié à partir de l'API 27. Quelle est l'alternative de FragmentStatePagerAdapter ?

private class MainPagerAdapter extends FragmentStatePagerAdapter {

    MainPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment result = new DummyFragment();
        return result;
    }

    @Override
    public int getCount() {
        return 5;
    }

}

Le code ci-dessus montre FragmentStatePagerAdapter , getItem(...) y super(...) comme étant déprécié.

1 votes

J'ai le même problème. J'étais passé de la v4 à la v13, afin de pouvoir utiliser des fragments standard dans le code (pas les fragments de support et le gestionnaire de fragments de support). Maintenant, il semble que je doive revenir aux fragments de support. Au moins une demi-journée d'édition de code :-(

0 votes

Refactorisé le code pour les bibliothèques de support Androidx, en espérant qu'il reste stable pendant un certain temps maintenant.

0 votes

Si vous utilisez AndroidX, vous pouvez le faire de la manière suivante stackoverflow.com/questions/51131172/

85voto

hkpogo Points 331

Passer à ViewPager2 et utiliser FragmentStateAdapter à la place comme mentionné par Erik Jhordan Rey.


Ancienne réponse (dépréciée aussi maintenant)

Les constructeurs suivants font la même chose

super(@NonNull FragmentManager fm)
super(@NonNull FragmentManager fm, BEHAVIOR_SET_USER_VISIBLE_HINT)

Passing BEHAVIOR_SET_USER_VISIBLE_HINT a été déprécié. Vous devez passer BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT à la place.

La différence dans le passage de ces derniers est expliquée dans FragmentPagerAdapter :

 /**
 * Indicates that Fragment#setUserVisibleHint(boolean) will be 
 * called when the current fragment changes.
 */
@Deprecated
public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0;

/**
 * Indicates that only the current fragment will be 
 * in the Lifecycle.State#RESUMED state. All other Fragments 
 * are capped at Lifecycle.State#STARTED.
 */
public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1;

2 votes

Cela affecte-t-il la fonctionnalité de quelque manière que ce soit ?

0 votes

BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT cela signifie que les fragments de décalage seront exécutés sur onStart() et le fragment actuel sera exécuté sur onStart() et onResume(). sur la façon dont il affecte pas vraiment, dépend de votre mise en œuvre.

2 votes

Bien qu'il soit maintenant déprécié developer.Android.com/reference/androidx/fragment/app/

67voto

Denis Dmitrienko Points 493

Vous pouvez prolonger

androidx.fragment.app.FragmentStatePagerAdapter;

et appeler

super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);

dans le constructeur de votre classe

5 votes

Mais il est déprécié. Que peut-on utiliser à la place de FragmentStatePagerAdapter ?

2 votes

Pourriez-vous vérifier vos importations : utilisez-vous androidx.fragment.app.FragmentStatePagerAdapter ou Android.support.v4.app.FragmentStatePagerAdapter ?

1 votes

Vous avez raison, c'était la mauvaise importation. Ceci fonctionne.

23voto

Alok Gupta Points 545

Cela fonctionne pour moi.

Dans Kotlin :

class TasksPagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT )

5 votes

J'ai utilisé votre code mais j'ai obtenu l'erreur lint "must be one of BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)" que dois-je faire ?

0 votes

Obtenir une erreur Doit être l'un des éléments suivants : androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_SET_USER_VISIBLE_HINT, androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT

22voto

Moisoni Ionut Points 118

Vous devez ajouter un comportement dans votre MainPagerAdapter comme ça :

super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);

2voto

Azay Gupta Points 151

Cette classe a été supprimée au niveau 27.1.0 de l'API. qui était dans le support v13 https://developer.Android.com/reference/Android/support/v13/app/FragmentStatePagerAdapter

Utiliser FragmentStatePagerAdapter à partir du support v4 https://developer.Android.com/reference/Android/support/v4/app/FragmentStatePagerAdapter

4 votes

FragmentStatePagerAdapter est également déprécié.

0 votes

Je pense que malgré le fait d'avoir eu les mauvais liens (que je viens de corriger), cette réponse est correcte : v4 FragmentStatePagerAdapter n'est pas déprécié. developer.Android.com/reference/Android/support/v4/app/ @Ernesto Je ne suis pas sûr de la version de FragmentStatePagerAdapter à laquelle votre commentaire fait référence.

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