android开发中要用到Adapter的地方很多。
那么,要怎么写才能使Adapter看起来比较的清爽呢?
下面是我个人比较喜欢的方式。大神就可以飘过了,希望对初学者有点帮助。
/**
* Created by ubuntu on 13-6-4.
* 一个封装良好的Adapter示例
*/
public class PersonAdapter extends BaseAdapter{
private List<Person> persons;
private LayoutInflater inflater;
public PersonAdapter(Activity activity, List<Person> persons){
this.persons = persons;
if (this.persons==null){
this.persons = new ArrayList<Person>();
}
inflater = activity.getLayoutInflater();
}
@Override
public int getCount() {
return persons.size();
}
@Override
public Person getItem(int i) {
return persons.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
final ViewHolder viewHolder;
if (view == null){
view = inflater.inflate(R.layout.persion_item, null);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) view.getTag();
}
// 绑定model中的数据到View中
viewHolder.bindData(persons.get(i));
return view;
}
private class ViewHolder{
public ViewHolder(View view){
if (view == null){
throw new IllegalArgumentException("view cannot be null");
}
// 在此查找控件
tv_id = (TextView) view.findViewById(R.id.tv_id);
tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_age = (TextView) view.findViewById(R.id.tv_age);
}
/** 提供方法用于绑定View-Model */
public void bindData(Person person){
tv_id.setText(String.valueOf(person.id));
tv_name.setText(person.name);
tv_age.setText(String.valueOf(person.age));
}
public TextView tv_id;
public TextView tv_name;
public TextView tv_age;
}
}
Person实体保持就是一个简单的实体:
public class Person {
public int id;
public String name;
public int age;
}