使用ViewPager加载页面出现空白--笔记

首次启动程序时首页空白,切换页面后正常

为了便于管理,通常为ViewPager的每个子页面建立一个基类,然后用一个集合(一般用ArrayList)承载该ViewPager的所有子页面,然而在该基类的构造方法中一般引用initView()方法,使得某个子类在new的时候就创建视图,而在pageradapter中的

public Object instantiateItem(ViewGroup container, int position) { }

方法中一般也会调用基类的initView()方法添加将要展示界面,错误出现:

即使在其他地方改变ViewPager中子页面的显示也无法将其展示出来,即出现空白现象

事例代码(智慧北京项目):

viewPager.setAdapter(new MyPagerAdapter(baseContentPagerList));
/*
*初始化首页数据
*baseContentPagerList为承载每个子页面的ArrayList
*/
baseContentPagerList.get(0).initData();

此时的首页界面如下:
这里写图片描述
明明调用initData()方法为该页面添加数据可首页依然空白

出现的原因:

两次调用initView方法(基类和instantiateItem方法)引起的,即:
1. new一个子类时,已经调用initView方法(此时是间接调用基类initView方法,由于多态的存在真正调用的是相应的子类),创建第一个视图对象
2. 给ViewPager设置adapter时,由于java的特性,adapter中的方法体还没有真正调用,因为只有在执行是才会真正调用
3. 此时调用baseContentPagerList.get(0).initData()方法时,实际上是给 第一个视图对象添加数据
4. 然而启动程序是,ViewPager首先会加载两个页面,而此时加载 首页时,第二次调用initView方法产生第二个视图对象,且显示的是该视图,第一个视图对象虽有数据却被第二个视图“覆盖”,故显示的是第二个没有数据的视图,因此出现空白,滑动后正常。

改正做法:

  1. 在基类中添加getView( )方法,并让每个子类实现。构造方法和以前一样引用initView方法,不然给首页初始化数据时会出现:为null的对象赋值的错误
  2. 在pageradapter的instantiateItem方法中调用getView方法
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值