java - setUserVisibleHint 中的空上下文

标签 java android android-viewpager fragment android-context

当 ViewPager 中的 fragment 变得可见时,需要向用户显示一条消息。目前调用是:

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

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

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

Context 是显示消息所必需的。但是,不能保证在调用 setUserVisibleHint() 时附加该 fragment 。因此,Context 将为 null,即使 isVisiableToUser == true

检查 isVisibleToUser && isAttached() 在理论上是可行的,但是 setUserVisibleHint()isAttached() == true 之后不会被触发。

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

最佳答案

迟到总比不到好,我有一个有点老套的解决方案,从 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);

}

关于java - setUserVisibleHint 中的空上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105725/

相关文章:

java - CDI @Produces Javadoc 需求解释

java - 添加对象调试可视化?

android - 适用于 Android/iPhone 应用程序的广告中介 - 服务器端

android - 如何在 fragment 内实现 viewpager?

java - bean标签的parent属性是否相当于Java中的继承?

android - 以编程方式滚动的表格布局

android - 如何仅刷新 RecyclerView 中项目的 Textview

android - 如何知道 viewpager 是向左还是向右滚动?

android - 在 ViewPager 中设置页面预览

java - Gradle 测试夹具插件和核心模块依赖项