dans mon cas, je voulais démarrer des animations dans les vues, mais avec setUserVisibleHint j'ai eu quelques problèmes ...
ma solution est:
1 / addOnPageChangeListener pour votre adaptateur:
mViewPager.addOnPageChangeListener(this);
2 / implémenter OnPageChangeListener:
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
3 / écraser les 3 méthodes:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state)
{
}
4 / déclarez et initialisez cette variable sur votre classe
private static int mTabState = 1;
Remarque : j'ai trois fragments dans mon adaptateur et j'utilise mTabState pour setCurrentItem et la position actuelle de l'adaptateur qui reconnaissent quel fragment est montré à l'utilisateur dans le temps ... 5 / dans la méthode onPageSelected, ajoutez ces codes:
if (mTabState == 0 || position == 0)
{
Intent intent = new Intent("animation");
intent.putExtra("current_position", position);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
si la page précédente ou la page actuelle est la page 0 (fragment en position 0), alors faites ceci
6 / maintenant dans votre classe de fragment (fragment en position 0 de l'adaptateur), vous devez créer un récepteur de diffusion et l'enregistrer dans la méthode onResume et le désinscrire onPause methos:
BroadcastReceiver broadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
if (Objects.equals(intent.getAction(), "animation"))
{
int currentPosition = intent.getIntExtra("current_position", 0);
if (currentPosition == 0)
{
startAnimation();
setViewsVisible();
} else
{
setViewsInvisible();
}
}
}
};
@Override
public void onResume()
{
super.onResume();
LocalBroadcastManager.getInstance(mContext).registerReceiver(broadcastReceiver, new IntentFilter("animation"));
}
@Override
public void onPause()
{
super.onPause();
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(broadcastReceiver);
}
résumé: j'ai un adaptateur de pageur de fragments qui montre trois fragments, je veux montrer quelques animations sur les vues dans le fragment en position 0 de l'adaptateur, pour cela, j'utilise BroadcastReceiver. Lorsque le fragment est sélectionné, je lance la méthode d'animation et montre les vues à l'utilisateur, lorsque le fragment n'est pas affiché à l'utilisateur, j'essaye les vues invisibles ...