у моєму випадку я хотів запустити кілька анімацій у видах, але із setUserVisibleHint виникли деякі проблеми ...
моє рішення:
1 / addOnPageChangeListener для вашого адаптера:
mViewPager.addOnPageChangeListener(this);
2 / впровадити OnPageChangeListener:
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
3 / замінити 3 методу:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state)
{
}
4 / оголосити та ініціалізувати цю змінну у своєму класі
private static int mTabState = 1;
повідомлення : у мого адаптера у мене є три фрагменти, і використовую mTabState для setCurrentItem та поточне положення адаптера, які розпізнають, який фрагмент буде показаний користувачеві вчасно ... 5 / в методі onPageSelected додати ці коди:
if (mTabState == 0 || position == 0)
{
Intent intent = new Intent("animation");
intent.putExtra("current_position", position);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
якщо попередня або поточна сторінка - це сторінка 0 (фрагмент у позиції 0), виконайте це
6 / тепер у вашому класі фрагментів (фрагмент у позиції 0 адаптера) ви повинні створити транслятор приймача та зареєструвати його методом onResume та скасувати реєстрацію на методіПауза:
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);
}
Короткий зміст: у мене відьма адаптера пейджера фрагментів показує в ньому три фрагменти, я хочу показати кілька анімацій на "Перегляди у фрагменті" в позиції 0 адаптера. Для цього я використовую BroadcastReceiver. Коли фрагмент вибрано, я запускаю метод анімації та показує «Перегляди користувачеві», коли «Фрагмент не відображається користувачеві», я намагаюся «Невидимі види»