项目结构

A:使用ViewHolder优化,在其中可以添加许多方法。如果没提供方法也可在在使用的时候,根据ID再做逻辑事物判断。

public class ViewHolder {// 存放所有item idprivate SparseArray<View> mView;// 对于行private int mPosition;// 每行布局private View mConvertView;private ViewHolder(Context context, ViewGroup parent, int LayoutId,int position) {this.mPosition = position;this.mView = new SparseArray<View>();this.mConvertView = LayoutInflater.from(context).inflate(LayoutId,parent, false);mConvertView.setTag(this);}// 获得一个对象public static ViewHolder getViewHolder(Context context, View convrtView,ViewGroup parent, int LayoutId, int position) {if (convrtView == null)return new ViewHolder(context, parent, LayoutId, position);return (ViewHolder) convrtView.getTag();}// 根据控件ID获得组件public <T extends View> T getView(int viewId) {View view = mView.get(viewId);if (view == null) {view = mConvertView.findViewById(viewId);mView.put(viewId, view);}return (T) view;}// 为控件赋值添加方法// TextViewpublic ViewHolder setText(int viewId, String text) {TextView tv = getView(viewId);tv.setText(text);return this;}public ViewHolder setText(int viewId, CharSequence text) {TextView tv = getView(viewId);tv.setText(text);return this;}public ViewHolder setText(int viewId, int text) {TextView tv = getView(viewId);tv.setText(text);return this;}public ViewHolder setTextColor(int viewId, int color) {TextView tv = getView(viewId);tv.setTextColor(color);return this;}public ViewHolder setTextSize(int viewId, int size) {TextView tv = getView(viewId);tv.setTextSize(size);return this;}// ImageViewpublic ViewHolder setImageBitmap(int viewId, Bitmap bm) {ImageView iv = getView(viewId);iv.setImageBitmap(bm);return this;}public ViewHolder setImageDrawable(int viewId, Drawable drawable) {ImageView iv = getView(viewId);iv.setImageDrawable(drawable);return this;}public ViewHolder setImageResource(int viewId, int resId) {ImageView iv = getView(viewId);iv.setImageResource(resId);return this;}public ViewHolder setImageURI(int viewId, Uri uri) {ImageView iv = getView(viewId);iv.setImageURI(uri);return this;}// 获取条目位置public int getPosition() {return this.mPosition;}// 获取缓存viewpublic View getConvertView() {return this.mConvertView;}}

B:编写一个实用的CommonAdapter

public abstract class CommonAdapter<T> extends BaseAdapter {private LayoutInflater mLayoutInflater;private Context mContext;private List<T> mData;private int mLayoutId;public CommonAdapter(Context context, List<T> data, int layoutId) {this.mContext = context;this.mLayoutInflater = LayoutInflater.from(context);this.mData = data;this.mLayoutId = layoutId;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn mData.size();}@Overridepublic T getItem(int position) {// TODO Auto-generated method stubreturn mData.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub// 获得viewholderViewHolder viewHolder = getViewholder(position, convertView, parent);//填充数据  callBack(viewHolder, getItem(position));// 返回 convertViewreturn viewHolder.getConvertView();}private ViewHolder getViewholder(int position, View convertView,ViewGroup parent) {return ViewHolder.getViewHolder(mContext, convertView, parent,mLayoutId, position);}public abstract void callBack(ViewHolder viewHolder , T item) ;}

C:使用注意传入的第二个参数类型必须是之前构造函数定义的集合类型。在ListView中有button,checkbox等按钮时,在布局item2中设置焦点不可用。

public class MainActivity extends Activity {private ListView lv;// 设置数据private List<Bean> getData() {List<Bean> list = new ArrayList<Bean>();for (int i = 0; i < 100; i++)list.add(new Bean("这是第" + i + "条小项目", "android适配器", String.valueOf(new SimpleDateFormat().format(new Date(System.currentTimeMillis()))), R.drawable.ic_launcher));return list;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv = (ListView) findViewById(R.id.lv);lv.setAdapter(new CommonAdapter<Bean>(MainActivity.this, getData(),R.layout.item2) {@Overridepublic void callBack(ViewHolder viewHolder, final Bean item) {// TODO Auto-generated method stubviewHolder.setText(R.id.tv_desc, item.getDesc());viewHolder.setText(R.id.tv_time, item.getTime());viewHolder.setText(R.id.tv_title, item.getTitle());viewHolder.setImageResource(R.id.iv_phone,R.drawable.ic_launcher);// 利用bean中记录状态final CheckBox checkBox = viewHolder.getView(R.id.cb);checkBox.setChecked(item.getChecked());checkBox.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubitem.setChecked(checkBox.isChecked());}});}});}
}

Bean.java

利用Bean中flag标记checkbox状态。

public class Bean {private String desc;private String title;private String time;private int phone;//标记checkbox状态private Boolean flag=false;public Boolean getChecked() {return flag;}public void setChecked(Boolean flag) {this.flag = flag;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public int getPhone() {return phone;}public void setPhone(int phone) {this.phone = phone;}public Bean(String desc, String title, String time, int phone) {this.desc = desc;this.title = title;this.time = time;this.phone = phone;}}

item2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ecec"android:orientation="vertical"android:padding="10dp" ><CheckBox
        android:id="@+id/cb"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:focusable="false" /><TextView
        android:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /><TextView
        android:id="@+id/tv_desc"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView"android:textColor="#00ff00"android:textSize="30sp" /><TextView
        android:id="@+id/tv_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /><ImageView
        android:id="@+id/iv_phone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:src="@drawable/ic_launcher" /><View
        android:layout_width="match_parent"android:layout_height="2dp"android:background="#ff0000" /></LinearLayout>

鸿洋大神 详细教程链接

http://blog.csdn.net/lmj623565791/article/details/38902805

基于ListView、GridView万能适配器相关推荐

  1. Java泛型应用之打造Android中ListView和GridView万能适配器【CommonAdapter】--超简洁写法

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/52813227 [DylanAndroid的csdn博客] 在android中使 ...

  2. android通用listview和gridview万能适配器实现的两种方式

    Listview和gridview是超级常用组件,于是乎,应该封装一下直接拿来用用而不是每次都写Adapter,这样多么的麻烦是不.虽然国内外大牛都有封装过,但是我总结了两个封装好的Adapter分享 ...

  3. Android 快速开发系列 打造万能的ListView GridView 适配器

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...

  4. android listview万能适配器

    参考    Android 快速开发系列 打造万能的ListView GridView 适配器 Hongyang public class CommonViewHolder {private Cont ...

  5. 一个适用于ListView/GridView/RecyclerView的通用适配器

    简化大量重复代码 支持多布局 自定义图片加载 常用数据操作 view复用 RecyclerView item 点击和长按事件 GitHub源码地址 简书地址 gradle依赖 dependencies ...

  6. Android进阶笔记09:Android 万能适配器

    1. Android 万能适配器      项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...

  7. Android开发之万能适配器

    ListView.GridView等等非常多的东西都需要适配器.而如果开发一个app每一个listview都有写一个Adapter的话,那还怎么愉快的玩游戏.. 什么是ViewHolider以及的用法 ...

  8. day5 RecyclerView、多布局、万能适配器

    RecyclerView 概义 RecyclerView是什么 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传统的ListView,更加 ...

  9. android学习笔记----ListView和各种适配器简介

    学习笔记 目录 打气筒(LayoutInflater对象)介绍: ArrayAdapter用法: 关于具有自定义 ArrayAdapter 的示例应用见这里: SimpleAdapter用法: 关于L ...

最新文章

  1. # 命令行新建 job 错误: ORA-01008 并非所有变量都已绑定 。
  2. Werkzeug源码阅读笔记(四)
  3. Python中shuffle() 函数的作用及用法
  4. 八皇后问题(回溯法)
  5. input maxlength 汉字_汉字原来这么好玩 第A15版:亲子悦读 20201104期 都市女报
  6. 【Spring】Spring boot 中文乱码
  7. 华为的mysql数据库如何登陆_怎么登陆mysql数据库
  8. java除,小数的问题
  9. 拓端tecdat|R语言时间序列分析复杂的季节模式
  10. ArcGIS道路网拓扑检查
  11. Linux Qt程序打包发布
  12. vue 左侧菜单可拖动
  13. 华为手机怎么把计算机放到桌面,将华为手机投影到计算机屏幕
  14. 企业微信网页应用开发 - 异步请求
  15. ultravnc服务器不接收消息,远程控制软件UltraVNC的教程
  16. Loadrunner11 录制手机App脚本多种方法介绍
  17. coreldraw凹槽_CATIA课时:操作工具栏创建修剪分割曲面视频教程_翼狐网
  18. DELPHI 键盘HOOK,DLL注入,带窗口DLL注入及释放
  19. opencv创建负片
  20. Vue和Servlet搭配使用

热门文章

  1. 惠普服务器安装系统哪个键,惠普usb装系统按哪个键
  2. oracle stat=30,使用Solaris上的filestat工具
  3. java 设计模式之Bridge
  4. Asymptote 学习记录(6) 练习用模块roundedpath画出一个图
  5. 保存计算过程的计算器Java实现
  6. Spring 5 DI 相关内容 5.2 构造器 注入 5.2.5 构造器注入的一些问题
  7. 审计风险控制流程的起点_确定关键审计事项遵循的三个基本步骤
  8. 基于国产CH32V307单片机的图像混沌加密
  9. 联想电脑安装win11步骤 联想电脑安装Win11图文教程
  10. 二维码生成(根据不同要求)