码迷,mamicode.com
首页 > 移动开发 > 详细

android开发之SimpleAdapter的使用

时间:2015-01-11 01:00:13      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:

    使用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的使用

标签:

原文地址:http://www.cnblogs.com/limaofuyuanzhang/p/4215996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!