Zero context in setUserVisibleHint

When viewing a fragment in ViewPager, the message should be displayed to the user. Currently calling:

// Within a class that extends Fragment
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) {
        MessageUtility.displayMessage(getContext());
    }
}

MessageUtility.displayMessage() opens a message dialog box.

Contextrequired to display the message. However, the fragment cannot be attached to a point in time setUserVisibleHint(). So it Contextwill be null, though isVisiableToUser == true.

Verification isVisibleToUser && isAttached()works in theory, but setUserVisibleHint()does not occur after isAttached() == true.

Is there any way to allow the call displayMessage()until attached Fragment?

+4
source share
2 answers

, . OnPageChangeListenr ViewPager.

 yourPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i2) {

            }

            @Override
            public void onPageSelected(int i) {
                // Check if i == your fragment position and display message        
                MessageUtility.displayMessage(getContext());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
0

, , , setUserVisibleHint() onActivityCreated().

private boolean myIsVisibleToUser;

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    myIsVisibleToUser=isVisibleToUser;
    if (isVisibleToUser && getActivity()!=null) {
          MessageUtility.displayMessage(getContext());    
        }
}


@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    setUserVisibleHint(myIsVisibleToUser);

}
0

Source: https://habr.com/ru/post/1652210/


All Articles