no meu caso, eu queria iniciar algumas animações em visualizações, mas com setUserVisibleHint tive alguns problemas ...
minha solução é:
1 / addOnPageChangeListener para o seu adaptador:
mViewPager.addOnPageChangeListener(this);
2 / implementar OnPageChangeListener:
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
3 / substituir os 3 métodos:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state)
{
}
4 / declare e inicialize esta variável em sua classe
private static int mTabState = 1;
aviso : eu tenho três fragmentos em meu adaptador e uso mTabState para setCurrentItem e a posição atual do adaptador que reconhece qual fragmento é mostrado ao usuário a tempo ... 5 / no método onPageSelected adicione estes códigos:
if (mTabState == 0 || position == 0)
{
Intent intent = new Intent("animation");
intent.putExtra("current_position", position);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
se a página anterior ou a página atual for a página 0 (fragmento na posição 0), faça isso
6 / agora em sua classe de fragmento (fragmento na posição 0 do adaptador), você deve criar broadcast receiver e registrá-lo no método onResume e cancelar o registro 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);
}
resumo: eu tenho Fragment Pager Adapter que mostra três fragmentos nele, eu quero mostrar algumas animações em Views em Fragment na posição 0 do Adapter, para isso eu uso BroadcastReceiver. Quando o fragmento é selecionado, eu inicio o método de animação e mostro as visualizações para o usuário, quando o fragmento não está sendo exibido para o usuário, tento visualizar as visualizações ...