ในกรณีของฉันฉันต้องการเริ่มภาพเคลื่อนไหวในมุมมอง แต่ด้วย 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);
}
สรุป:ฉันมีแม่มด Fragment Pager Adapter แสดง Three Fragments อยู่ในนั้นฉันต้องการแสดงภาพเคลื่อนไหวบางส่วนบน Views ใน Fragment ในตำแหน่ง 0 ของ Adapter สำหรับสิ่งนี้ฉันใช้ BroadcastReceiver เมื่อ Fragment ถูกเลือกฉันเริ่มเมธอด Animation และแสดง Views ให้กับ User เมื่อ Fragment ไม่แสดงต่อผู้ใช้ฉันพยายามที่จะมองไม่เห็น ...