BaseAdapter详解
1.使用BaseAdapter的步骤
- 在layout中编写一个ListView
- 创建一个数据源,这里简单的用一个List Map集合来代替
- 编写一个MyBaseAdapter的java文件继承自BaseAdapter并实现它的四个基础方法
- 在ListView、GridView或者其他的view中,使用setAdapter方法传入我们的baseAdapter中。
2.BaseAdapter的四个基础方法
- getCount : 要绑定的条目的数目,比如格子的数量
- getItem : 根据一个索引(位置)获得该位置的对象
- getItemId : 获取条目的id
- getView : 获取该条目要显示的界面
下面贴一段代码来解释一下这四个基础方法
private class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private List<Map<String, Object>> data;
private Context context;
public MyAdapter(Context context,List<Map<String,Object>> data){
this.data=data;
this.context=context;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
//getCount方法是程序在加载显示到ui上时就要先读取的,这里获得的值决定了listview显示多少行
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.activity_main,null);
ImageView imageView= layout.findViewById(R.id.img);
TextView textView=layout.findViewById(R.id.name);
TextView textView1=layout.findViewById(R.id.intr);
Map<String,Object> item =data.get(position);
imageView.setImageResource((Integer) item.get("img"));
textView.setText((CharSequence) item.get("name"));
textView1.setText((CharSequence) item.get("intr"));
return layout;
}
}
解释一下LayoutInflater方法,它是用来加载布局的,用LayoutInflater的inflate方法就可以将你的item布局绘制出来。getView方法中的三个参数,第一position是指现在是第几个条目;第二convertView是已经绘制好了的视图;parent是ListView之类的View视图。
用inflate方法绘制好后的view最后return返回给getView方法就可以了。