【问题标题】:Null Context in setUserVisibleHintsetUserVisibleHint 中的空上下文
【发布时间】:2016-12-30 13:13:25
【问题描述】:

当 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() 时附加该片段。因此,Context 将是 null,即使 isVisiableToUser == true

检查isVisibleToUser && isAttached()理论上可行,但setUserVisibleHint()isAttached() == true之后不会被激怒。

有什么方法可以让displayMessage() 的调用等到Fragment 附加?

【问题讨论】:

  • 查看我编辑的答案

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


【解决方案1】:

这是一种不同的方法,但更有效的解决方案。将新的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) {

            }
        });

【讨论】:

  • setOnPageChangeListener 已弃用,请改用addOnPageChangeListener
【解决方案2】:

迟到总比没有好,我有一个小技巧,从onActivityCreated()方法调用setUserVisibleHint()

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

}

【讨论】:

  • 您的解决方案对我帮助很大。谢谢
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多