Viewpage使用

1、mViewPager.setOffscreenPageLimit(2);//设置缓存view 的个数(实际有3个,缓存2个+正在显示的1个)

2、

destroyItem()该方法实现的功能是移除一个给定位置的页面。适配器有责任从容器中删除这个视图。这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除

getCount ()返回当前有效视图的个数。

instantiateItem (ViewGroup container, int position)返回一个代表新增视图页面的Object(Key),这里没必要非要返回视图本身,也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key

第一:将参数里给定的position的视图,增加到conatiner中,供其创建并显示、。

第二:返回当前position的View做为此视图的Key。还记得API官方文档中下面这段话么?
对于非常简单的pageradapter或许你可以选择用page本身作为键,在创建并且添加到viewgroup后instantiateItem方法里返回该page本身即可 destroyItem将会将该page从viewgroup里面移除。isViewFromObject方法里面直接可以返回view == object。

 @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub  
        container.addView(viewList.get(position));

        //把当前新增视图的位置(position)作为Key传过去  
        return position;
    }
};
Override
public boolean isViewFromObject(View arg0, Object arg1) {
    // TODO Auto-generated method stub  
    //根据传来的key,找到view,判断与传来的参数View arg0是不是同一个视图  
    return arg0 == viewList.get((int)Integer.parseInt(arg1.toString()));
}

3、

  • getItemPosition()
    • 该函数用以返回给定对象的位置,给定对象是由 instantiateItem() 的返回值。
    • 在 ViewPager.dataSetChanged() 中将对该函数的返回值进行判断,以决定是否最终触发 PagerAdapter.instantiateItem() 函数。
    • 在 PagerAdapter 中的实现是直接传回 POSITION_UNCHANGED。如果该函数不被重载,则会一直返回 POSITION_UNCHANGED,从而导致 ViewPager.dataSetChanged() 被调用时,认为不必触发 PagerAdapter.instantiateItem()。很多人因为没有重载该函数,而导致调用
      PagerAdapter.notifyDataSetChanged() 后,什么都没有发生。

参考1

参考2

参考3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值