How to test if a fragment view is visible to the user?

前端 未结 10 571
闹比i
闹比i 2020-11-28 04:42

I have a ViewPager, each page is a Fragment view. I want to test if a fragment is in a visible region. the Fragment.isVisible only test

  • the fragment is attache
10条回答
  •  一个人的身影
    2020-11-28 05:01

    You're right there is a better way to do this!

    Have a look at the FragmentPagerAdapter javadoc online and you'll see there is a method setPrimaryItem(ViewGroup container, int position, Object object):void doing exactly what you need.

    From the javadoc

    public void setPrimaryItem (ViewGroup container, int position, Object object)

    Called to inform the adapter of which item is currently considered to be the "primary", that is the one show to the user as the current page.

    Parameters container The containing View from which the page will be removed. position The page position that is now the primary. object The same object that was returned by instantiateItem(View, int).

    Note on scroll state

    Now if you implement this and start debugging to get a feel of when exactly this is called you'll quickly notice this is triggered several times on preparing the fragment and while the user is swiping along.

    So it might be a good idea to also attach a ViewPager.OnPageChangeListener and only do what has to be done once the viewpagers scroll state becomes SCOLL_STATE_IDLE again.

提交回复
热议问题