转载请注明出处:https://blog.csdn.net/a512337862/article/details/82498400

前言

CommonBaseAdapter 是对 BaseAdapter进行简单的封装,减少部分冗余代码,只需要重写三个方法:

  • getLayoutResId() : 返回 adapter 对应的layout文件ID
  • bindView() : 返回 layout文件所有需要操作的View的ID
  • initData(ViewHolder holder, T t, int position) : 通过ViewHolder.getViewById获取对应的View,进行绑定显示数据,增加回调监听等操作

CommonBaseAdapter

/** * Author : BlackHao * Time : 2018/9/4 14:11 * Description : ListView/GridView BaseAdapter */public abstract class CommonBaseAdapter<T> extends BaseAdapter {    private List list;    private Context context;    public CommonBaseAdapter(List list, Context context) {        this.list = list;        this.context = context;    }    @Override    public int getCount() {        return list == null ? 0 : list.size();    }    @Override    public Object getItem(int position) {        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @SuppressWarnings("unchecked")    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder;        if (convertView == null) {            convertView = View.inflate(context, getLayoutResId(), null);            viewHolder = new ViewHolder();            //将控件与 ViewHolder 绑定            int[] viewIdArray = bindView();            for (int aViewIdArray : viewIdArray) {                viewHolder.bindViewById(convertView, aViewIdArray);            }            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        initData(viewHolder, list.get(position), position);        return convertView;    }    /**     * 获取 layout 文件     *     * @return layout 文件 ID     */    protected abstract int getLayoutResId();    /**     * 将控件与 ViewHolder 绑定     *     * @return 需要绑定的控件 ID 数组     */    protected abstract int[] bindView();    /**     * 绑定显示数据,增加回调监听等操作     *     * @param holder   ViewHolder     * @param position 对应的位置     * @param t        list.get(position)数据     */    protected abstract void initData(ViewHolder holder, T t, int position);    public class ViewHolder {        private SparseArray viewSparseArray;        ViewHolder() {            this.viewSparseArray = new SparseArray<>();        }        /**         * 通过 id获取 View         *         * @param id  View ID         * @param  View 类型         * @return 对应的 View         */        @SuppressWarnings("unchecked")        public extends View> E getViewById(@IdRes int id) {            return (E) viewSparseArray.get(id);        }        /**         * 通过 id 获取 View并绑定到 ViewHolder         *         * @param view 布局文件 View         * @param id   View ID         */        public void bindViewById(View view, @IdRes int id) {            viewSparseArray.put(id, view.findViewById(id));        }    }}

TestAdapter

/** * Author : BlackHao * Time : 2018/9/4 14:58 * Description : TestAdapter */public class TestAdapter extends CommonBaseAdapter<String> {    public TestAdapter(List list, Context context) {        super(list, context);    }    @Override    protected int getLayoutResId() {        return R.layout.adapter_test;    }    @Override    protected int[] bindView() {        return new int[]{R.id.test_iv, R.id.test_tv};    }    @Override    protected void initData(ViewHolder holder, String s, int position) {        TextView tv = holder.getViewById(R.id.test_tv);        ImageView iv = holder.getViewById(R.id.test_iv);        tv.setText("Position:" + position + "  Content : " + s);        if (s.endsWith("pdf")) {            iv.setBackgroundResource(R.drawable.pdf);        } else if (s.endsWith("ppt")){            iv.setBackgroundResource(R.drawable.ppt);        }else {            iv.setBackgroundResource(R.drawable.unkown_file);        }    }}

结语

  • 下载地址 : https://github.com/LuoChen-Hao/BlackHaoUtil

更多相关文章

  1. Android(安卓)7.0导航栏上添加图标
  2. 第二个Activity和Android(安卓)ListView控件
  3. Android中TabHost的原理及使用
  4. Android(安卓)利用 Webservice 获取手机号码归属地
  5. Android利用addr2line分析traces.txt
  6. android获取友盟渠道名以及获取application中的meta-data
  7. android MIME文件类型
  8. Android获取当前时间的android.text.format.Time已过时
  9. 应用程序文件Android安全分析挑战:运行时篡改Dalvik字节码

随机推荐

  1. Service与Android系统设计(3)
  2. Android(安卓)P解决Socket通信Tcp粘包问
  3. android代码实现背景切换
  4. Android 与 Unity 交互一
  5. Android的第一个入门简单例子
  6. Android 4.4 KitKat升级率已经接近18%(20
  7. Android内核源码交叉编译
  8. 高焕堂android中文书全,电子文件for vers
  9. android:layout_gravity与android:gravity
  10. Adb移植(一)简单分析