首页 > 代码库 > android开发之SimpleAdapter的使用

android开发之SimpleAdapter的使用

    使用ArrayAdapter只能显示TextView,显示的内容比较单一。可以使用SimpleAdapter来让每一项显示的内容更加丰富。以下将实现一个样例,先上效果图。

技术分享   

    首先,先来看看xml代码,同样需要一个主布局和一个表示每一个列表项的布局。如下:

main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="match_parent"    android:layout_height="wrap_content"    ><!-- 定义一个List --><ListView android:id="@+id/mylist"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    /></LinearLayout>

      main.xml其实就只有一个ListView控件。

 

simple_item.xml

<?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,用于作为列表项的一部分。 -->    <ImageView        android:id="@+id/header"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingLeft="10dp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical" >        <!-- 定义一个TextView,用于作为列表项的一部分。 -->        <TextView            android:id="@+id/name"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:paddingLeft="10dp"            android:textColor="#f0f"            android:textSize="20dp" />        <!-- 定义一个TextView,用于作为列表项的一部分。 -->        <TextView            android:id="@+id/desc"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:paddingLeft="10dp"            android:textSize="14dp" />    </LinearLayout></LinearLayout>

      simple_item.xml中有一个ImageView和两个TextView,从文章开头给出的效果图可知道每一个列表项的显示效果。

      下面将给出实现代码,

public class SimpleAdapterTest extends Activity {    private String[] names = new String[] { "虎头", "弄玉", "李清照", "李白" };    private String[] descs = new String[] { "可爱的小孩", "一个擅长音乐的女孩", "一个擅长的文学的女性",            "浪漫主义诗人" };    private int[] imageIds = new int[] { R.drawable.tiger, R.drawable.nongyu,            R.drawable.qingzhao, R.drawable.libai };    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        // 创建一个List集合,List集合的元素是Map        List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();        for (int i = 0; i < names.length; i++) {            Map<String, Object> listItem = new HashMap<String, Object>();            listItem.put("header", imageIds[i]);            listItem.put("personName", names[i]);            listItem.put("desc", descs[i]);            listItems.add(listItem);        }       // 创建一个SimpleAdapter       /*        * SimpleAdapter(Context context, List<? extends Map<String, ?>> data,        * int resource, String[] from, int[] to)         * context         * data:元素为Map的List集合         * resource:列表项的布局文件         * from:用来显示到列表项的数据的key值集合         * to:用来显示列表项数据的resource中的控件id集合,注意要跟上面的显示数据key值集合一一对应         */        SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,                R.layout.simple_item, new String[] { "personName", "header",                        "desc" },                new int[] { R.id.name, R.id.header, R.id.desc });        ListView list = (ListView) findViewById(R.id.mylist);        // 为ListView设置Adapter        list.setAdapter(simpleAdapter);    }}

      对比ArrayAdapter,可以发现,其实实现步骤还是那三步,设置数据,设置适配器,绑定适配器,只是有些步骤复杂了些,如下:

      1.设置数据:这里设置的数据必须是Map元素的List集合,Map可以放多个键值对;

      2.设置适配器:除了传入列表项布局文件id以及相应的数据集合外,还需要将用来显示到列表项的数据的key值集合,以及对应的布局文件中控件的ID集合

android开发之SimpleAdapter的使用