onCreateView前setUserVisibleHint称为片段 [英] setUserVisibleHint called before onCreateView in Fragment

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

问题描述

我的工作ViewPager并使用片段那儿,我发现

  

setUserVisibleHint()的片段onCreateView()之前调用

     

我使用的片段的支持库   android.support.v4.app.Fragment

这是与图书馆有问题?

如何才能摆脱它?

解决方案

  //创建布尔用于读取数据
私人布尔isViewShown = FALSE;

@覆盖
公共无效setUserVisibleHint(布尔isVisibleToUser){
    super.setUserVisibleHint(isVisibleToUser);
    如果(getView()!= NULL){
        isViewShown = TRUE;
        // fetchdata()包含逻辑,以显示数据被选择时大多的AsyncTask填充数据页
        fetchData();
    } 其他 {
        isViewShown = FALSE;
    }
}
 

使用 isViewShown 实例变量来决定是否获取的 onCreateView数据() setUserVisibleHint()

下面code包含逻辑 onCreateView()

  @覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
        捆绑savedInstanceState){
    查看查看= inflater.inflate(R.layout.main_layout,集装箱,假);

   //观点初始化步骤.......

   如果(!isViewShown){
        fetchData();
   }
   //做其他的东西
}
 

这code将解决您的问题。因为它解决了我的问题。 :)

这招将获取的 onCreateView数据()直接跳跃,从一个网页到另一个,而当你刷卡认为它将从<$ C $获取数据C> setUserVisibleHint()方法。 :)

I am working on ViewPager and using Fragment there I found

setUserVisibleHint() called before onCreateView() in Fragment

I am using Fragment from support library android.support.v4.app.Fragment

is this is a problem with Library ?

How can I get rid of it ?

解决方案

// 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;
    }
} 

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

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. :)

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. :)

这篇关于onCreateView前setUserVisibleHint称为片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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