setUserVisibleHint 在 Fragment 中的 onCreateView 之前调用 [英] setUserVisibleHint called before onCreateView in Fragment

查看:28
本文介绍了setUserVisibleHint 在 Fragment 中的 onCreateView 之前调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究 ViewPager 并使用 Fragment 在那里我发现

I am working on ViewPager and using Fragment there I found

setUserVisibleHint() 在 Fragment 中的 onCreateView() 之前调用

setUserVisibleHint() called before onCreateView() in Fragment

我正在使用支持库 android.support.v4.app.Fragment

这是图书馆的问题吗?

我怎样才能摆脱它?

编辑

我覆盖了 setUserVisibleHint() 并且没有调用 super 来摆脱它.

I Override setUserVisibleHint() and not calling super to get rid of it.

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    //FIXED: setUserVisibleHint() called before onCreateView() in Fragment causes NullPointerException
    //super.setUserVisibleHint(isVisibleToUser);
}

推荐答案

// create boolean for fetching data
private boolean isViewShown = false;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getView() != null) {
        isViewShown = true;
        // fetchdata() contains logic to show data when page is selected mostly asynctask to fill the data
        fetchData();
    } else {
        isViewShown = false;
    }
} 

使用 isViewShown 实例变量来决定是在 onCreateView() 还是在 setUserVisibleHint() 中获取数据.

Use isViewShown instance variable to decide whether to fetch data in onCreateView() or in setUserVisibleHint().

以下代码包含 onCreateView() 的逻辑:

Below code contains logic for onCreateView():

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.main_layout, container, false);

   // view initialization steps.......

   if (!isViewShown) {
        fetchData();
   } 
   // do other stuff
}

此代码将解决您的问题.因为它解决了我的问题.:)

This code will solve your problem. As It solved my problem. :)

这个技巧将在 onCreateView() 中获取数据以直接从一个页面跳转到另一个页面,而当您滑动视图时,它将从 setUserVisibleHint() 中获取数据方法.:)

This trick will fetch data in onCreateView() for direct jumping from one page to another, whereas when you swipe the view it will fetch the data from setUserVisibleHint() method. :)

这篇关于setUserVisibleHint 在 Fragment 中的 onCreateView 之前调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆