Android中的ListView使用案例(SimpleAdapter实现)

来源:互联网 发布:python rsa 私钥加密 编辑:程序博客网 时间:2024/06/04 18:21

ListView是可以垂直的滚动的显示一组列表的内容,其中的每一个条目可以是一个单独的组件,也可以是由多个组件组成的组合控件。
实现一个ListView控件的步奏:
1、准备ListView所要显示的数据,一般为一维或二维动态数组。
2、构建适配器,由于ListView中的每一个条目可以很简单,也可以很复杂,根据需要可以选择ArrayAdapter、SimpleAdapter、或者BaseAdapter。
3、使用setAdapter为一个ListView控件设置适配器。
4、为ListView添加监听器。
下面看具体的案例:

创建主界面,添加ListView控件

文件名称为:activity_main.xml
需要说明的是:该ListView的id为@android:id/list,否则NullPointException

<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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <ListView         android:id="@android:id/list"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        ></ListView></LinearLayout>

创建条目界面

文件名称为:item.xml

<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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="horizontal"    >    <ImageView        android:contentDescription="@null"        android:id="@+id/img"        android:layout_width="wrap_content"        android:layout_height="wrap_content"/>    <LinearLayout         android:orientation="vertical"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        >        <TextView             android:id="@+id/title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textColor="#CCCC99"/>        <TextView             android:id="@+id/info"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textColor="#CCCC99"            />    </LinearLayout></LinearLayout>

具体逻辑代码

package com.yangzi.listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.ListActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends ListActivity{    private ListView list;    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找到ListView控件        list = (ListView)findViewById(android.R.id.list);        //生成适配器的item和动态数组对应元素        构造函数原型:public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)        参数说明:        context(this) 当前Activity对象        data(getData() ) 要显示的数据,List集合类型        resource(R.layout.item) 条目的布局文件        from(新建的数组) data参数中Map的键名,要和生成数据中Map的键名一致        to (新建的数组) 条目布局文件中用于显示的控件        */        SimpleAdapter adapter = new SimpleAdapter(                this,                 getData(),                 R.layout.item,                 new String[]{"img","title","info"},                 new int[]{R.id.img,R.id.title,R.id.info});        //设置适配器        list.setAdapter(adapter);        //设置监听事件        list.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                    long arg3) {                Map<String,Object> clkmap = (Map<String,Object>)arg0.getItemAtPosition(arg2);                setTitle(clkmap.get("title").toString()+"的网址是:"+clkmap.get("info").toString());            }        });    }    private List<Map<String,Object>> getData(){        //这里可以看做对应ListView控件中的每一条Item        ArrayList<Map<String,Object>> listitem = new ArrayList<Map<String,Object>>();        //这里可以看做ListView控件中的每一条Item中的具体数据        Map<String,Object> map = new HashMap<String, Object>();        map.put("img", R.drawable.xx);//放置img        map.put("title", "百度");//放置title        map.put("info", "http://www.baidu.com");//放置info        listitem.add(map);//一条记录设置好了,就添加进去        map = new HashMap<String, Object>();        map.put("img", R.drawable.xx);        map.put("title", "新浪");        map.put("info", "http://www.sina.com.cn");        listitem.add(map);        //下面为了更明显的看到ListView控件的效果,使用循环添加多个记录        for (int i = 0; i < 10; i++) {            map = new HashMap<String, Object>();            map.put("img", R.drawable.xx);            map.put("title", "我的网站"+i);            map.put("info", "http://www.sina.com.cn@"+i);            listitem.add(map);        }        return listitem;    }}
0 0
原创粉丝点击