android ListView自定义适配器实现

2024-04-23 18:04:19 浏览数 (2)

android 自定义适配器

自定义适配器实现步骤 一,继承BaseAdapter 二,添加数据集合和反射器实现构造器和setter方法 三,实现getCount,getItem,getItemId方法 四,实现getView方法

一,继承BaseAdapter

首先我们创建一个java class ,习惯命名为MyAdapter,让他继承BaseAdapter,并重写他的方法

代码语言:javascript复制
public class MainAdapter extends BaseAdapter {
    @Override
    public int getCount() {//获得ListView总行数
        return 0;
    }

    @Override
    public Object getItem(int position) {//获得项的对象
        return null;
    }

    @Override
    public long getItemId(int position) {//获得项的id
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return null;
    }
}
二,添加数据集合和反射器实现构造器和setter方法

添加数据集合和反射器,反射器的作用是将一个layout布局反射为对象。

代码语言:javascript复制
    List<Map<String,Object>> list;//添加数据集合
    LayoutInflater inflater ;//添加反射器

在构造器中实例化反射器inflater

代码语言:javascript复制
    public MainAdapter(Context context) {
        inflater = LayoutInflater.from(context);
    }

实现list的setter方法

代码语言:javascript复制
    public void setList(List<Map<String, Object>> list) {
        this.list = list;
    }
三,实现getCount,getItem,getItemId方法

大家可以根据注释理解,为什么这样实现

代码语言:javascript复制
    @Override
    public int getCount() {//获得ListView总行数
        return list.size();
    }

    @Override
    public Object getItem(int position) {//获得项的对象
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {//获得项的id
        return position;
    }
四,实现getView方法

最后一步也就是最关键的一步了,实现getView方法,这里也就要用到我们之前的反射器,将行布局item转化为对象使用

代码语言:javascript复制
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = inflater.inflate(R.layout.item,null);//反射行布局
        ImageView logo = (ImageView) view.findViewById(R.id.logo);//获得各控件
        TextView textView = (TextView) view.findViewById(R.id.tv_main);

        logo.setImageResource((Integer) list.get(position).get("logo"));给控件赋值
        textView.setText((String) list.get(position).get("name"));
        return view;
    }
代码语言:javascript复制

0 人点赞