介绍
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; } }