Null Context in setUserVisibleHint

别说谁变了你拦得住时间么 提交于 2019-12-23 12:04:19

问题


A message needs to be displayed to the user when a fragment in a ViewPager becomes visible. Currently the call is:

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

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

MessageUtility.displayMessage() opens an alert dialog with a message.

Context is required to display the message. However, the fragment is not guaranteed to be attached by the time setUserVisibleHint() is called. Thus, the Context will be null, even though isVisiableToUser == true .

Checking isVisibleToUser && isAttached() works in theory, but setUserVisibleHint() is not provoked after isAttached() == true.

Is there some way to allow the call to displayMessage() to wait until the Fragment is attached?


回答1:


Better late than never ,I have a little hackish solution ,call setUserVisibleHint() from onActivityCreated() method.

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);

}



回答2:


It's a bit different approach but more effective solution. Add a new OnPageChangeListenr to your 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's position and display message        
                MessageUtility.displayMessage(getContext());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });


来源:https://stackoverflow.com/questions/39105725/null-context-in-setuservisiblehint

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!