ListView

来源:互联网 发布:手机淘宝申请账号注册 编辑:程序博客网 时间:2024/06/14 07:29

一:ListView 介绍

ListView:是以列表的方式显示数据的组件
特点:每一个列表项独占一行,每行的布局都相同,数据和布局分离,数据来自适配器

1.ArrayAdapter类

数组适配器类,该类负责将数组指定布局方式显示,通过与listview等控件相关联,在列表类型的控件中按指定布局样式显示数组中的数据
public ArrayAdapter(Context context, int textViewResourceId, T[] objects)
第一个参数:上下文对象,当前窗口对象
第二个参数:标签控件的资源索引值
第三个参数:数组对象



2.常用方法 Object getItemAtPosition(int position)

获取当前列表项

3.onItemClick接口

ListView的单击事件,当用户按下列表选项触发的是单击事件
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            }
第一个参数:当前列表对象,如ListView对象
第二个参数:view,被单击的列表项对象,如TextView
第三个参数:i,被单击的列表项在列表中所处的行的索引值

----------------------------------------------------------
1)数据源
 private String[] days = {"星期一","星期二","星期三","星期四",
    "星期五","星期六","星期天"};
lv = (ListView)findViewById(R.id.listview);
2)setAdapter与listview绑在一起
        lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,//布局文件
                days));//源数据的字符串数组
3)监听listview的选取事件
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String tv = (String)lv.getItemAtPosition(i);
                Log.i("xxx",tv);
            }
        })
;

二:ListView 常用的Adapter

Adapter:是连接数据与显示View的适配器接口,是数据与UI的纽带
1)ArrayAdapter 支持泛型操作,只能展示一行字
lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,//列表每一行的布局,只显示一行文字
                days));//数据源,是一个字符串数组

使用了ArrayAdapter来装配数据,效果如下



2)SimpleAdapter 可以自定义各种效果
例:带图片的ListView
左边显示图片,在图片的右边显示文字
用Map(String,Object> item来保存列表中每一项需要显示的图片和文字
在用SimpleAdpater将map数据写入自定义的布局,就可以显示列表了
-------------------------------------------------------------
SimpleAdapter的数据一般都是HashMap构成的ArrayList, list的每一节对应listView的每一行
HashMap的每个键值映射到布局文件中对应的id上
SimpleAdapter(Context  context, List<? extends Map<String, ?>>  data, int resource, String[]  from, int[] to)
      参数:
      1,context:上下文。
      2,data:基于Map的list。Data里边的每一项都和 ListView里边的每一项对应。Data里边的每一项都是一个Map类型,这个Map类里边包含了ListView每一行需要的数据。
      3,resource :就是一个布局layout,可引用系统提供的,也可以自定义,如cat.xml
      4,from:这是个名字数组,每个名字是为了在 ArrayList数组的每一个item索引Map<String,Object>的Object用的。即 map 中得key值
      5,to:里面是一个资源数组。这些资源是以id的形式来表示的。例如:R.id.image, R.id.title

a)自定义布局cat.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dip"
        android:layout_height="100dip"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        app:srcCompat="@mipmap/cat1" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/image"
        android:layout_marginBottom="23dp"
        android:textSize="30dip"
        android:layout_toEndOf="@+id/image"
        android:text="TextView" />
</RelativeLayout>


b)代码直接继承ListActivity,方便显示

public class SimpleAdapterActivity extends android.app.ListActivity {    private int[] image = {            R.mipmap.cat1,            R.mipmap.cat2,            R.mipmap.cat3,            R.mipmap.cat4,            R.mipmap.cat5,    };    private String[] title = {"猫大","猫二","猫三","猫四","猫五"};    ArrayList<Map<String,Object>> mData = new ArrayList<Map<String,Object>>();    private ListView lv = null;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        lv = getListView();        //1)填冲Map获取数据        for(int i=0; i<title.length;i++){            Map<String,Object> item = new HashMap<String,Object>();            item.put("image",image[i]);            item.put("title",title[i]);            mData.add(item);        }        //2)adapter 绑定数据和View        SimpleAdapter adapter = new SimpleAdapter(this,                mData,                R.layout.cat,                new String[]{"image","title"},                new int[]{R.id.image, R.id.title});        //3)设置adapter,将cat布局显示到listView当中        lv.setAdapter(adapter);        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                Toast.makeText(SimpleAdapterActivity.this,                        "你选中了"+title[i],                        Toast.LENGTH_LONG).show();            }        });    }}

3)BaseAdapter
参考:http://www.xuanyusong.com/archives/91
    :http://blog.csdn.net/harvic880925/article/details/17258789