質問

FragmentStatePagerAdapterと一緒にViewPagerを使用しています。このフラグメントが表示されているときにのみアニメーションを起動したい場合は、表示されます。 この問題は、現在ユーザーから見られているものの後にフラグメントが終了したときにアニメーションが起動することです。 アニメーションコードを「OnActivityCreated」フラグメント関数から「OnStart」フラグメント関数に移動し、「OnResume」フラグメント関数にも移動しましたが、同じことが発生します。

基本的には、フラグメントがいくつかのコードを起動するためにユーザーが見たページになるのを待つ必要があります。どうやってそうできますか?

事前にありがとうございました。

役に立ちましたか?

解決

私はそれを作りました。

    CustomOnPageChangeListener page_listener = new CustomOnPageChangeListener();
    view_pager.setOnPageChangeListener(page_listener);

    ...

    private static class CustomOnPageChangeListener extends SimpleOnPageChangeListener
    {
        @Override
        public void onPageSelected(int position)
        {
            if (position == fragment_position)
            {
                 MyFragment fragment = (MyFragment) fragment_pager_adapter.instantiateItem(view_pager, fragment_position);
                 fragment.startAnimation();
            }

            super.onPageSelected(position);
        }
    }
.

そしてもちろん、 myFragment コードにアニメーションを起動する startanimation()関数を書いてください。

他のヒント

次のようにしてみましたか:

@Override
public void onWindowFocusChanged (boolean hasFocus) {
   super.onWindowFocusChanged(hasFocus);
   if (hasFocus)
      myTextView.startAnimation(anim);
}
.

フラグメント内のsetUserVisibleHintをオーバーライドすることができます

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (mAnimation == null)
        return;

    if (isVisibleToUser) {
        mAnimation.resumeAnimation();
    } else {
        mAnimation.pauseAnimation();
    }
}
.

これを使ってください。FragmentStatePagerAdapterのために完全に働いた。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);
  if (isVisibleToUser) { 
      // TODO
  }
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top