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集合

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。