How to determine when Fragment becomes visible in ViewPager

后端 未结 26 1755
心在旅途
心在旅途 2020-11-22 00:24

Problem: Fragment onResume() in ViewPager is fired before the fragment becomes actually visible.

For example, I have 2 fragments with

26条回答
  •  一个人的身影
    2020-11-22 00:51

    Note that setUserVisibleHint(false) is not called on activity / fragment stop. You'll still need to check start/stop to properly register/unregister any listeners/etc.

    Also, you'll get setUserVisibleHint(false) if your fragment starts in a non-visible state; you don't want to unregister there since you've never registered before in that case.

    @Override
    public void onStart() {
        super.onStart();
    
        if (getUserVisibleHint()) {
            // register
        }
    }
    
    @Override
    public void onStop() {
        if (getUserVisibleHint()) {
            // unregister
        }
    
        super.onStop();
    }
    
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
    
        if (isVisibleToUser && isResumed()) {
            // register
    
            if (!mHasBeenVisible) {
                mHasBeenVisible = true;
            }
        } else if (mHasBeenVisible){
            // unregister
        }
    }
    

提交回复
热议问题