Search code examples
androidandroid-fragmentsandroid-viewpager

ViewPager call setUserVisibleHint after first Fragment is loaded


In my application, I have a ViewPager which holds many swipeable Tabs with Fragments inside. I use the setUserVisibleHint method to detect when a Fragment comes to the screen. This works great when the user swipes between tabs but it does not work on the first load. To run the code in the method I have to swipe to left and then back to the first Fragment because the setUserVisibleHint method is called before the onCreateView method.

Do you have any ideas how I can run this code after the first Fragment is visible? Is there a method in the ViewPager or something else?


Solution

  • You can't (and shouldn't) rely on setUserVisibleHint for this. Instead, you should be using a ViewPager.OnPageChangeListener to get callbacks for when a page becomes visible. E.g.

    viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // do your work
        } 
    });
    

    Note: You can use ViewPager.SimpleOnPageChangeListener if you don't need to listen for all callbacks.

    Update

    setOnPageChangeListener method is now deprecated, use addOnPageChangeListener instead

    viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // do your work
        } 
    });