In meinem Fall wollte ich einige Animationen in Ansichten starten, aber mit setUserVisibleHint gab es einige Probleme ...
meine Lösung ist:
1 / addOnPageChangeListener für Ihren Adapter:
mViewPager.addOnPageChangeListener(this);
2 / OnPageChangeListener implementieren:
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
3 / überschreibe die 3 Methoden:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state)
{
}
4 / deklariere und initialisiere diese Variable in deiner Klasse
private static int mTabState = 1;
Hinweis : Ich habe drei Fragmente in meinem Adapter und verwende mTabState für setCurrentItem und die aktuelle Position des Adapters, die erkennen, welches Fragment dem Benutzer rechtzeitig angezeigt wird ... 5 / in der onPageSelected-Methode fügen Sie diese Codes hinzu:
if (mTabState == 0 || position == 0)
{
Intent intent = new Intent("animation");
intent.putExtra("current_position", position);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
Wenn die vorherige oder aktuelle Seite Seite 0 ist (Fragment an Position 0), dann machen Sie dieses Zeug
6 / Jetzt müssen Sie in Ihrer Fragmentklasse (Fragment an Position 0 des Adapters) einen Rundfunkempfänger erstellen, ihn in der onResume-Methode registrieren und die Registrierung bei onPause methos aufheben:
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);
}
Zusammenfassung: Ich habe einen Fragment-Pager-Adapter, der drei Fragmente enthält. Ich möchte einige Animationen in Ansichten in Fragment in Position 0 des Adapters anzeigen. Dafür verwende ich BroadcastReceiver. Wenn Fragment ausgewählt ist, starte ich die Animationsmethode und zeige dem Benutzer die Ansichten. Wenn Fragment dem Benutzer nicht angezeigt wird, versuche ich, unsichtbare Ansichten anzuzeigen.