setUserVisibleHint中的空上下文

时间:2016-08-23 15:52:43

标签: java android android-viewpager fragment android-context

当ViewPager中的片段变得可见时,需要向用户显示消息。目前的电话是:

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

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

MessageUtility.displayMessage()打开一个带有消息的警告对话框。

显示消息需要

Context。但是,在调用setUserVisibleHint()时,不保证片段是附加的。因此,即使Contextnull也会isVisiableToUser == true

检查isVisibleToUser && isAttached()理论上是有效的,但在setUserVisibleHint()之后不会引发isAttached() == true

是否有某种方法可以让displayMessage()的来电等到Fragment附加?

2 个答案:

答案 0 :(得分:3)

迟到总比没有好,我有一点hackish解决方案,从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);

}

答案 1 :(得分:0)

这是一种不同的方法,但更有效的解决方案。向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's position and display message        
                MessageUtility.displayMessage(getContext());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });