제 경우에는 뷰에서 일부 애니메이션을 시작하고 싶었지만 setUserVisibleHint를 사용하면 몇 가지 문제가 있습니다 ...
제 솔루션은 다음과 같습니다.
1 / 어댑터에 대한 addOnPageChangeListener :
mViewPager.addOnPageChangeListener(this);
2 / OnPageChangeListener 구현 :
public class PagesFragment extends Fragment implements ViewPager.OnPageChangeListener
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;
주의 사항 : 내 어댑터에 세 개의 조각이 있으며 setCurrentItem에 대해 mTabState를 사용하고 시간 내에 사용자에게 표시되는 조각을 인식하는 어댑터의 현재 위치를 사용합니다 ... 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에있는 조각)에서 broadcast receiver를 만들고 onResume 메서드에 등록하고 onPause methos 등록을 취소해야합니다.
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를 사용합니다. 조각이 선택되면 애니메이션 메서드를 시작하고 사용자에게보기를 표시합니다. 조각이 사용자에게 표시되지 않으면 보이지 않는보기를 시도합니다 ...