在上一篇博客中介绍了在ListView中使用 ArrayAdapter,使用ArrayAdapter存在一个弊端,只能处理一种数据,在上一篇博客中,只能处理好友的姓名,不能处理好友的图片,为了既可以处理好友的姓名又可以处理好友的图片,ListView中提供了一个SimpleAdapter,使用SimpleAdapter既可以处理好友的姓名,也可以处理好友的图片,实现的效果如下
首先使用Android Studio创建一个Android工程
1、在drawable文件夹添加十张图片,作为人物的头像
修改activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="example.administrator.arrayadaptedemo.MainActivity">
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
3、新建一个item_listview.xml文件作为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="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_photo"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/man1"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textSize="20sp"
android:text="小志"/>
</LinearLayout>
4、新建一个Person类,用于处理好友的信息
package example.administrator.arrayadaptedemo;
public class Person {
private String name;
private int imageId;
public Person(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
}
package example.administrator.arrayadaptedemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建集合
List<Person> personList = new ArrayList<Person>();
//创建person对象
Person person1 = new Person("刘得意", R.drawable.man1);
Person person2 = new Person("王锐", R.drawable.man2);
Person person3 = new Person("何煜中", R.drawable.man3);
Person person4 = new Person("王磊", R.drawable.man4);
Person person5 = new Person("冯松", R.drawable.man5);
Person person6 = new Person("裴培", R.drawable.man6);
Person person7 = new Person("马骁", R.drawable.man7);
Person person8 = new Person("马婧", R.drawable.man8);
Person person9 = new Person("周俊升", R.drawable.man9);
Person person10 = new Person("贺祺", R.drawable.man10);
//将Person对象添加到集合中
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
personList.add(person5);
personList.add(person6);
personList.add(person7);
personList.add(person8);
personList.add(person9);
personList.add(person10);
//获得布局文件上的ListView控件
ListView lv = (ListView) findViewById(R.id.lv);
//集合中每个元素都包含ListView条目需要的所有数据
// 该案例中每个条目需要一个字符串和一个整型,所以使用一个map来封装这两种数据
List< Map<String, Object> > data = new ArrayList< Map<String,Object> >();
for(Person p : personList) {
Map<String, Object> map = new HashMap <String, Object>();
map.put("name", p.getName());
map.put("photo", p.getImageId());
data.add(map);
}
//给ListView设置适配器
//第一个参数:上下文
//第二个参数:用于设置好友的头像和名字
//第三个参数:布局文件的资源id
//第四个参数:设置朋友的头像和名字属性
//第五个参数:设置朋友的头像和名字的资源id
lv.setAdapter(new SimpleAdapter(
this,
data,
R.layout.item_listview,
new String[]{"photo", "name"},
new int[]{R.id.iv_photo, R.id.tv_name}));
}
}