android ListView自定义适配器实现

android 自定义适配器

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

一,继承BaseAdapter

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

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布局反射为对象。

    List<Map<String,Object>> list;//添加数据集合
    LayoutInflater inflater ;//添加反射器

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

    public MainAdapter(Context context) {
        inflater = LayoutInflater.from(context);
    }

实现list的setter方法

    public void setList(List<Map<String, Object>> list) {
        this.list = list;
    }

三,实现getCount,getItem,getItemId方法

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

    @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转化为对象使用

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

你可能感兴趣的:(Study-Jams)