w moim przypadku chciałem uruchomić animacje w widokach, ale z setUserVisibleHint mam kilka problemów ...
moje rozwiązanie to:
1 / addOnPageChangeListener dla twojego adaptera:
mViewPager.addOnPageChangeListener(this);
2 / Zaimplementuj OnPageChangeListener:
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
3 / zastąpić 3 metody:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state)
{
}
4 / zadeklaruj i zainicjalizuj tę zmienną w swojej klasie
private static int mTabState = 1;
uwaga : mam trzy fragmenty w moim adapterze i używam mTabState dla setCurrentItem i aktualnej pozycji adaptera, które rozpoznają, który fragment jest wyświetlany użytkownikowi w czasie ... 5 / w metodzie onPageSelected dodaj następujące kody:
if (mTabState == 0 || position == 0)
{
Intent intent = new Intent("animation");
intent.putExtra("current_position", position);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
jeśli poprzednia lub bieżąca strona to strona 0 (fragment na pozycji 0), zrób to
6 / teraz w swojej klasie fragmentów (fragment na pozycji 0 adaptera) należy stworzyć odbiornik rozgłoszeniowy i zarejestrować go w metodzie onResume oraz wyrejestrować go metody onPause:
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);
}
podsumowanie: mam Fragment Pager Adapter, który pokazuje w nim trzy fragmenty, chcę pokazać animacje na widokach w fragmencie w pozycji 0 adaptera, do tego używam BroadcastReceiver. Po wybraniu fragmentu uruchamiam metodę Animation i pokazuję widoki użytkownikowi, gdy fragment nie jest wyświetlany użytkownikowi, próbuję wyświetlić niewidoczne widoki ...