Adapter提供数据与控件的绑定,Android中有简单的适配器可以供使用,但因为数据的复杂性有时我们需要自定义适配器,实现我们想要展示的数据。
自定义Adapter:
public class MyAdapter extends BaseAdapter {
private List<Map<String,Object>> list;
private Context context;
public MyAdapter(List<Map<String,Object>> list,Context context){
super();
this.list=list;
this.context=context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
//循环使用convertView
if(convertView==null) {
convertView= LayoutInflater.from(context).inflate(R.layout.listlayout,null);
holder=new ViewHolder();
holder.image=(ImageView)convertView.findViewById(R.id.imageView);
holder.text=(TextView)convertView.findViewById(R.id.textView);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.image.setImageResource(R.drawable.x);
if(list.get(position).get("name")!=null)
{
holder.text.setText(list.get(position).get("name").toString());
}
return convertView;
}
//使用viewholder提高查找速度
static class ViewHolder{
ImageView image;
TextView text;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return list.get(position);
}
}
XML文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_alignParentLeft="true"
android:layout_margin="@dimen/activity_horizontal_margin"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textView"
android:layout_toRightOf="@id/imageView"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/activity_horizontal_margin"/>
</RelativeLayout>
最终效果图: