Android——ListView,BaseAdapter,BaseAdapter的优化
介绍
ListView:列表是根据数据源自动扩充的组件
属性
android:divider:设置分割线的颜色
android:dividerHeight:设置分割item的高度
方法
public void setAdapter( BaseAdapter baseAdapter )
参数:
BaseAdapter:适配器用作将数据源加载到converView子项上
返回值:无
返回值意义:无
作用:添加适配器,让数据源加载到子项上
public void setOnItemClickListener( AdapterView.OnItemClickListener onItemClickListener )
参数:
AdapterView.OnItemClickListener onItemClickListener:点击事件对象
返回值:无
返回值意义:无
作用:给ListView添加子项点击事件
使用
lv = findViewById(R.id.lv); listViewAdapter3 = new ListViewAdapter3(MainActivity3.this,dataArray); lv.setAdapter(listViewAdapter3);
BaseAdapter
介绍
适配器,将数据加载到converItem子项中
方法
View getView(int position )
参数:
int position:数据项的位置
返回值:View
返回值意义:获取对于数据项的View
作用:获取对应数据项的View
使用
1. 适配器需要被继承重写( getCount() , getItem() , getItemId() , getView() )方法 。 ( 获取子项数目,获取子项数据,获取子项Id,获取子项视图 )
2. 适配器优化 将converView死亡复用,通过setTag()和ViewHolder类减少组件查询次数
/** * Create By Visen * Date: 2021/9/5 */ public class ListViewAdapter3 extends BaseAdapter { private Context context; private ArrayList<Person> dataArray; ListViewAdapter3(Context context, ArrayList<Person> dataArray){ this.context = context; this.dataArray = dataArray; } @Override public int getCount() { return dataArray.size(); } @Override public Object getItem(int position) { return dataArray.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 把数据加载到子项。 // converView的死亡复用 // 通过setTag(Object )多次查询复用 Person person = dataArray.get(position); if(convertView == null){ LayoutInflater layoutInflater = LayoutInflater.from(context); convertView = layoutInflater.inflate(R.layout.item_lv,null,false); MyViewHolder myViewHolder = new MyViewHolder(); myViewHolder.txtName = convertView.findViewById(R.id.txtName); myViewHolder.txtAge = convertView.findViewById(R.id.txtAge); myViewHolder.txtName.setText(person.getName()); myViewHolder.txtAge.setText(person.getAge()); convertView.setTag(myViewHolder); }else { MyViewHolder myViewHolder =(MyViewHolder) convertView.getTag(); myViewHolder.txtName.setText(person.getName()); myViewHolder.txtAge.setText(person.getAge()); } return convertView; } class MyViewHolder{ TextView txtName; TextView txtAge; } }
原文地址:https://www.cnblogs.com/remix777/p/15231222.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Redis入坟(六)分布式集群,概念、原理、实操
- Redis入坟(一)redis的前世今生、redis基础及存储结构源码讲解
- Redis入坟(二)高级特性,发布订阅、事务、Lua脚本
- 使用OpenCV对运动员的姿势进行检测
- Redis入坟(三)Redis为什么这么快?
- Redis入坟(番外篇)配置文件redis.conf,解析每个参数的含义
- 使用OpenCV自动去除背景色
- Redis入坟(四)Redis内存回收知多少
- Redis入坟(五)持久化
- Python爬取杜赛博客教程内容,应用pdfkit打印pdf文件
- Java程序员必须知道的常用序列化技术及选型,Protobuf 原理详解
- Python异步编程之 协程 & asyncio & 异步
- Redis入坟(八)内存管理与优化,面试必考
- 逐行阅读Spring5.X源码(十二)AOP源码分析,难!面试官都不一定懂!
- 逐行阅读Spring5.X源码(十三)spring事务源码分析