Android(安卓)BaseAdapter 简单封装
16lz
2021-01-26
转载请注明出处: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
更多相关文章
- Android(安卓)7.0导航栏上添加图标
- 第二个Activity和Android(安卓)ListView控件
- Android中TabHost的原理及使用
- Android(安卓)利用 Webservice 获取手机号码归属地
- Android利用addr2line分析traces.txt
- android获取友盟渠道名以及获取application中的meta-data
- android MIME文件类型
- Android获取当前时间的android.text.format.Time已过时
- 应用程序文件Android安全分析挑战:运行时篡改Dalvik字节码