在工作中经常会碰到数据分类展示的需求,这个时候就需要使用viewpager嵌套fragment或者自定义tableView(仿IOS Tableview)来实现。今天就秀一下小老虎我平时是怎么样用10分钟完成一个viewpager页面的。
1.XML布局
这里就直接上图了,没有太多技术可言
2.适配器PagerAdapter
viewpager同样需要一个适配器,方便我们对各个View进行控制。首先要继承PagerAdapter类。至少要覆写以下几个方法。
⑴getCount:获取当前view的总数目;
⑵isViewFromObject:官方API原文意思是:用于判断是否由对象生成界面。这里我们一般返回view==object;
⑶instantiateItem:这个方法返回一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中;
⑷destroyItem:这个方法,是从ViewGroup中移出当前View;
以上4个方法是必须要覆写出来的。接着这里还需要用到PagerTabSlidingTabStrip来显示标题。所以还要覆写一个方法:
⑸getPageTitle:返回一个存放标题的String数组。
class MyPagerAdapter extends PagerAdapter{
private ArrayList<View> views;
private Context context;
private String titles[]={
CouponActivity.this.getResources().getString(R.string.shop_coupon),
CouponActivity.this.getResources().getString(R.string.act_coupon),
};
public MyPagerAdapter(Context context,ArrayList<View> views){
this.context = context;
this.views = views;
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position),0);
return views.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
3.简单版的滑动监听器SimpleOnPageChangeListener
正常的viewpager教程都会让你实现一个OnPageChangeListener的借口,并重写里面的3个方法(这个自行百度),但身为懒癌晚期的小老虎我是不能忍受,因为很多情况并不需要重写里面方法,于是我在viewpager的源码中找到了一个SimpleOnPageChangeListener的静态类,继承了这个接口。于是乎我们每次只要写上一个方法返回这个类就OK了。
public ViewPager.OnPageChangeListener getOnPageChangeListener(){
return new ViewPager.SimpleOnPageChangeListener();
}
4.实例化并绑定数据。
前面几步已经把刀磨好了,接下来就到了最简单的收割步骤了。把fragment(或者page),viewpager,adapter,Tab这些实例化之后,把page放在一个ArrayList,然后传给适配器,再绑定适配器,最后给tab设置滑动监听器就OK了。由于懒癌晚期,这里直接粘部分项目源码了
private PagerSlidingTabStrip toptap;
private ViewPager mViewPager;
private ArrayList<View> views;
private MyPagerAdapter mAdapter;
private ShopCouponPage shopCouponPage;//商城代金券
private ActCouponPage actCouponPage;//活动现金券
private void init() {
mViewPager = (ViewPager) findViewById(R.id.vp);
toptap = (PagerSlidingTabStrip) findViewById(R.id.tab);
//设置标题的样式
toptap.setTextColor(0xFF8E8e8e);
toptap.setShouldExpand(true);
toptap.setTextSize(UIHelper.dipToPx(this, 16));
toptap.setLightTextColor(0xFF3ED1A5);
toptap.setIndicatorTextColor(true);
toptap.setIndicatorColor(0xFF3ED1A5);
toptap.setUnderlineHeight(2);
toptap.setUnderlineColor(0x00000000);
views = new ArrayList<View>();
shopCouponPage = new ShopCouponPage(this);
actCouponPage = new ActCouponPage(this);
views.add(shopCouponPage.getView());
views.add(actCouponPage.getView());
mAdapter = new MyPagerAdapter(this,views);
mViewPager.setAdapter(mAdapter);
toptap.setViewPager(mViewPager);
toptap.setOnPageChangeListener(getOnPageChangeListener());
}
以下是效果图 (page内容请无视)
好了以上就是小老虎的高效viewpager。如果有朋友希望我给一个完整的Demo或者想了解其他知识点在工作中怎么运用请在评论里留下您的邮箱和宝贵意见 ( ^_^ )/~~拜拜.