dalam kasus saya, saya ingin memulai beberapa animasi dalam tampilan, tetapi dengan setUserVisibleHint mendapat beberapa masalah ...
solusi saya adalah:
1 / addOnPageChangeListener untuk adaptor Anda:
mViewPager.addOnPageChangeListener(this);
2 / implementasikan OnPageChangeListener:
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
3 / timpa 3 metode:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state)
{
}
4 / deklarasikan dan lakukan inisialisasi variabel ini di kelas Anda
private static int mTabState = 1;
pemberitahuan : saya memiliki tiga fragmen di adaptor saya, dan menggunakan mTabState untuk setCurrentItem dan posisi adaptor saat ini yang mengenali fragmen mana yang ditampilkan kepada pengguna tepat waktu ... 5 / dalam metode onPageSelected tambahkan kode ini:
if (mTabState == 0 || position == 0)
{
Intent intent = new Intent("animation");
intent.putExtra("current_position", position);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
jika halaman sebelumnya atau halaman saat ini adalah halaman 0 (fragmen di posisi 0) maka lakukan hal ini
6 / sekarang di kelas fragmen Anda (fragmen di posisi 0 adaptor), Anda harus membuat penerima siaran dan mendaftarkannya dalam metode onResume dan membatalkan pendaftarannya pada metode 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);
}
ringkasan: Saya memiliki Penyihir Adaptor Pager Fragmen yang menunjukkan Tiga Fragmen di dalamnya, saya ingin menampilkan beberapa Animasi pada Tampilan dalam Fragmen di Posisi 0 Adaptor, Untuk ini saya menggunakan BroadcastReceiver. Ketika Fragmen Dipilih Saya memulai metode Animasi dan menunjukkan Tampilan kepada Pengguna, Ketika Fragmen tidak Ditampilkan kepada Pengguna, saya mencoba untuk Tampilan Tak Terlihat ...