Android通用适配器CommonAdapter

Android通用适配器CommonAdapter

1、刚完成一个小项目,项目中有多个页面,其中包含了许多ListView和GridView,避免不了要写很多的Adapter,当时就像那么多重复的代码,若是抽取一下就好了,由于时间紧迫,没有来得及抽取,刚好前几天看到慕课上《打造万能适配器》,本文算是对该视频的学习记录,按照自己的方式,对视频中的代码进行了稍稍的改动,废话说多了,下面进入主题…
2、Demo源码:http://download.csdn.net/detail/gonghao2014/9704384

1、普通方式

注:这里只给出关键部分代码

//类似ListView这样的视图,继承BaseAdapter实现ListView的适配器类
public class ListViewAdapter extends BaseAdapter {
   
    private Context mContext;
    private List<Bean> mBeans;
    public ListViewAdapter(Context context, List<Bean> beans) {
        this.mContext = context;
        this.mBeans = beans;
    }

    @Override
    public int getCount() {
        return mBeans.size();
    }

    @Override
    public Object getItem(int position) {
        return mBeans.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == 
CommonAdapter 一个适用于ListView/GridView/RecyclerView的Adapter库,简化大量重复代码,支持多种布局,可自定义图片加载的实现。功能特点:简化大量重复代码支持多布局自定义图片加载常用数据操作view复用RecyclerView item 点击和长按事件gradle依赖dependencies {     compile 'com.classic.adapter:commonadapter:1.0'     //项目中使用到RecyclerView,需要添加依赖     compile 'com.android.support:recyclerview-v7:23.2.0'}ListView/GridView 使用示例:List<News> newsList = ...; //单布局文件 listView = (ListView) findViewById(R.id.listview); listView.setAdapter(new CommonAdapter<News>(context,     //item布局文件     R.layout.item_none_picture, newsList ) {     @Override public void onUpdate(BaseAdapterHelper helper, News item) {         //BaseAdapterHelper详细用法,见下方         helper.setText(R.id.xxx, item.getTitle())                //可实现ImageLoad接口,进行图片自定义加载方式,demo里面使用的Glide               .setImageLoad(new GlideImageLoad())               .setImageUrl(R.id.xxx,item.getCoverUrl());     } }); //多布局文件 private final class MultipleLayoutAdapter extends CommonAdapter<News>{     public MultipleLayoutAdapter(Context context, int layoutResId, List<News> data) {         super(context, layoutResId, data);     }     //多种布局重写此方法即可     @Override public int getLayoutResId(News item) {         int layoutResId = -1;         switch (item.getNewsType()){             case News.TYPE_NONE_PICTURE: //布局样式一                 layoutResId = R.layout.item_none_picture;                 break;             case News.TYPE_SINGLE_PICTURE: //布局样式二                 layoutResId = R.layout.item_single_picture;                 break;             case News.TYPE_MULTIPLE_PICTURE: //布局样式三                 layoutResId = R.layout.item_multiple_picture;                 break;             更多的布局样式 ...         }         return layoutResId;     }     @Override public void onUpdate(BaseAdapterHelper helper, News item) {         helper.setImageLoad(new GlideImageLoad());         switch (item.getNewsType()){             case News.TYPE_NONE_PICTURE: //布局样式一                 helper.setText(R.id.xxx, item.getTitle())                       .setImageUrl(R.id.xxx,item.getCoverUrl());                 break;             case News.TYPE_SINGLE_PICTURE: //布局样式二                 helper.setText(R.id.xxx, item.getTitle())                       .setImageUrl(R.id.xxx,item.getCoverUrl());                 break;             case News.TYPE_MULTIPLE_PICTURE: //布局样式三                 helper.setText(R.id.xxx, item.getTitle())                       .setImageUrl(R.id.xxx,item.getCoverUrl());                 break;             更多的布局样式 ...         }     } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值