首先,activity_main.xml布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView android:id="@+id/listview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@color/sfffff"
android:dividerHeight="2dp"/>
</LinearLayout>
其次,每个ListView中的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher"
android:scaleType="fitXY"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="zhangsan"/>
<TextView android:id="@+id/address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="whan"/>
</LinearLayout>
</LinearLayout>
再次,MyBaseAdapter中的代码:
public class MyBaseAdapter extends BaseAdapter {
//定义该adapter的数据集合
private List<Person> persons;
private Context context;
public MyBaseAdapter(List<Person> persons, Context context) {
this.persons = persons;
this.context = context;
}
//更新Adapter,参数是更新之后的集合
public void updateAdapter(List<Person> persons){
this.persons = persons;
notifyDataSetChanged();
}
//集合的size
@Override
public int getCount() {
return persons.size();
}
//ListView里面的数据集合的单个对象,也就是Person
@Override
public Person getItem(int position) {
return persons.get(position);
}
//ListView的唯一的Id,根据位置也就是position来访问
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i("Tiger", "getView position = "+position);
ViewHolder holder = null;
//如果convertView为空,说明还没有初始化
if(convertView == null){
//首先得到LayoutInflater的对象,通过静态方法from
LayoutInflater ifter = LayoutInflater.from(context);
//使用LayoutInflater的对象来加载布局,转化成View对象
convertView = ifter.inflate(R.layout.base_item, null);
holder = new ViewHolder();
holder.imageView = (ImageView)convertView.findViewById(R.id.icon);
holder.nameTextView = (TextView)convertView.findViewById(R.id.name);
holder.addressTextView = (TextView)convertView.findViewById(R.id.address);
//缓存这个ViewHodler
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
Log.i("Tiger", "getTag holder name = "+holder.nameTextView.getText());
}
//得到数据
Person person = persons.get(position);
//注入头像数据
holder.imageView.setImageResource(person.getResId());
//注入名字数据
holder.nameTextView.setText(person.getName());
//注入地址数据
holder.addressTextView.setText(person.getAddress());
return convertView;
}
static class ViewHolder{
ImageView imageView;
TextView nameTextView;
TextView addressTextView;
}
}
最后,MainActivity代码:
public class MainActivity extends Activity {
private ListView listView;
private List<Person> personList;
private MyBaseAdapter baseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.listview);
initBaseAdapter();
}
private void initBaseAdapter(){
//构造数据集合
personList = new ArrayList<Person>();
for(int i=0; i<5; i++) {
personList.add(new Person(R.mipmap.pic1, "张三", "湖北武汉"));
personList.add(new Person(R.mipmap.pic2, "李四", "湖南长沙"));
personList.add(new Person(R.mipmap.pic3, "王五", "广东广州"));
personList.add(new Person(R.mipmap.pic1, "赵六", "深圳南山"));
personList.add(new Person(R.mipmap.pic2, "田七", "北京北京"));
personList.add(new Person(R.mipmap.pic2, "田七", "北京北京"));
personList.add(new Person(R.mipmap.pic2, "田七", "北京北京"));
personList.add(new Person(R.mipmap.pic2, "田七", "北京北京"));
personList.add(new Person(R.mipmap.pic2, "田七", "北京北京"));
personList.add(new Person(R.mipmap.pic2, "田七", "北京北京"));
}
//设置适配器
baseAdapter = new MyBaseAdapter(personList, this);
listView.setAdapter(baseAdapter);
}
}
效果如下: