私の場合、ビューでいくつかのアニメーションを開始したかったのですが、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;
注意:私はアダプターに3つのフラグメントがあり、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のフラグメント)で、ブロードキャストレシーバーを作成してonResumeメソッドに登録し、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);
}
概要:フラグメントページャーアダプターの魔女が3つのフラグメントを表示しています。アダプターの位置0にあるフラグメントのビューにアニメーションを表示したいので、BroadcastReceiverを使用します。フラグメントが選択されると、アニメーションメソッドを開始してユーザーにビューを表示します。フラグメントがユーザーに表示されない場合は、非表示のビューを試みます...