自定义适配器实现步骤
一,继承BaseAdapter
二,添加数据集合和反射器实现构造器和setter方法
三,实现getCount,getItem,getItemId方法
四,实现getView方法
首先我们创建一个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;
}
}
添加数据集合和反射器,反射器的作用是将一个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;
}
大家可以根据注释理解,为什么这样实现
@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方法,这里也就要用到我们之前的反射器,将行布局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;
}