由SimpleAdapter启发写的封装类,使用的时候只需修改ItemInfo和ViewHolder 的属性,以及ViewHolder 的setItem方法即可
//listitem数据类,用于填充到listitem中的数据
private class ItemInfo{
public String name;
public ItemInfo(String name){
this.name=name;
}
}
//与listitem内的控件一一对应
private class ViewHolder {
public TextView textview;
public Button button;
/**初始化控件*/
public ViewHolder(View convertView){
button =(Button) convertView.findViewById(R.id.button);
textview = (TextView) convertView.findViewById(R.id.textView);
}
/**设置控件数据*/
public void setItem(ItemInfo itemInfo){
textview.setText(itemInfo.name);
}
}
// 重写adapter
private class ListItemAdapter extends BaseAdapter {
private ViewHolder holder;
private List<ItemInfo> itemInfo; //ListView中要显示的数据
private Context context;
private int ItemLayoutID;//R.layout.xxxx_listitem
public ListItemAdapter(Context context,int ItemLayoutID,List<ItemInfo> item) {
this.context=context;
this.ItemLayoutID=ItemLayoutID;
this.itemInfo=item;
}
@Override
public int getCount() {
return itemInfo.size();
}
@Override
public Object getItem(int arg0) {
return itemInfo.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
//重写getView(convertView重用)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(ItemLayoutID, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.setItem(itemInfo.get(position));
return convertView;
}
}
调用方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView) this.findViewById(R.id.listView1);
List<ItemInfo> list= new ArrayList<ItemInfo>();
list.add(new ItemInfo("111"));
list.add(new ItemInfo("222"));
list.add(new ItemInfo("333"));
ListItemAdapter adapter = new ListItemAdapter(this,R.layout.list_item,list);
listview.setAdapter(adapter);
}