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

 

上一篇:URL diff URI


下一篇:2021年Android高级面试题,讲的明明白白!