ViewPager使用详解

一、ViewPager的基本使用
ViewPager的适配器是PagerAdapter,如FragmentPagerAdapter或FragmentStatePagerAdapter,实现一个PagerAdapter,必须至少覆盖以下方法:
1.instantiateItem(ViewGroup, int)
2.destroyItem(ViewGroup, int, Object)
3.getCount()
4.isViewFromObject(View, Object)

public class MyViewPagerAdapter extends PagerAdapter{  
    private List<View> mListViews;  
    public MyViewPagerAdapter(List<View> mListViews) {  
        this.mListViews = mListViews;//构造方法,参数是我们的页卡,这样比较方便。  
    }  
    @Override  
    public void destroyItem(ViewGroup container, int position, Object object)   {     
       container.removeView(mListViews.get(position));//删除页卡  
    }  
    @Override  
    public Object instantiateItem(ViewGroup container, int position) {  //这个方法用来实例化页卡         
        container.addView(mListViews.get(position), 0);//添加页卡  
        return mListViews.get(position);  
    } 
    @Override  
    public int getCount() {           
       return  mListViews.size();//返回页卡的数量  
    }  
    @Override  
    public boolean isViewFromObject(View arg0, Object arg1) {             
       return arg0==arg1;//官方提示这样写  
    }  
} 

二、ViewPager加载机制
(1)强制刷新
Viewpager在调用notifyDataSetChanged()时,界面无刷新。
getItemPosition()方法默认返回POSITION_UNCHANGED,可以修改适配器的写法,覆盖getItemPosition()方法,当调用notifyDataSetChanged时,让getItemPosition方法人为的返回POSITION_NONE,从而达到强迫viewpager重绘所有item的目的。
这种方法的弊端大家都很容易看出来,我不需要刷新的项目也被重新加载了,浪费系统资源; 如果ViewPager要刷新单个页面,可以在instantiateItem时给每个view加上tag,然后在需要刷新页面时通过View.getTag()来判断是否是我们想要刷新的页面,只给当前页面返回POSITION_NONE。
(2)避免刷新,使用缓存
setOffscreenPageLimit方法可以设置缓存几个页面,这样在不重写getItemPosition的情况下,在缓存范围内的页面都不会被重新加载,ViewPager默认的缓存页面是3个,如果设置一个较大的缓存数量,可以提升用户体验,但是会对内存占用比较大。如果重写了getItemPosition并且返回POSITION_NONE,这个方法就不起作用了,无论如何都会刷新。
三、ViewPager的常用设置
1)mViewPager.setOffscreenPageLimit(2);//设置缓存view 的个数(实际有3个,缓存2个+正在显示的1个)
2)mViewPager.setPageMargin((int)getResources().getDimensionPixelOffset(R.dimen.ui_5_dip));//设置viewpager每个页卡的间距,与gallery的spacing属性类似

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值