en mi caso, quería iniciar algunas animaciones en las vistas, pero con setUserVisibleHint obtuve algunos problemas ...
mi solución es:
1 / addOnPageChangeListener para su adaptador:
mViewPager.addOnPageChangeListener(this);
2 / implementar OnPageChangeListener:
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
3 / anular los 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 / declara e inicializa esta variable en tu clase
private static int mTabState = 1;
aviso : tengo tres fragmentos en mi adaptador, y uso mTabState para setCurrentItem y la posición actual del adaptador que reconoce qué fragmento se muestra al usuario a tiempo ... 5 / en el método onPageSelected agregue estos códigos:
if (mTabState == 0 || position == 0)
{
Intent intent = new Intent("animation");
intent.putExtra("current_position", position);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
si la página anterior o la página actual es la página 0 (fragmento en la posición 0), haga esto
6 / ahora en su clase de fragmento (fragmento en la posición 0 del adaptador), debe crear un receptor de transmisión y registrarlo en el método onResume y anular el registro en los métodos de pausa:
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);
}
resumen: tengo un adaptador de buscapersonas de fragmentos que muestra tres fragmentos, quiero mostrar algunas animaciones en vistas en fragmentos en la posición 0 del adaptador, para esto utilizo BroadcastReceiver. Cuando se elige un fragmento, comienzo el método de animación y le muestro las vistas al usuario, cuando el fragmento no se muestra al usuario, intento ver las vistas invisibles ...