关闭

列表控件ListView和适配器Adapter

259人阅读 评论(0) 收藏 举报

学习笔记


一个ListView通常有两个职责:

(1)将数据填充到布局

(2)处理用户的选择点击等操作

一个ListView创建需要3个元素:

(1)ListView中每一列的View;(2)填入View的数据或图片等;(3)链接数据与ListView的适配器。

适配器是一个链接数据和AdapterView(ListView就是一个典型的AdapterView)的桥梁,通过它能够有效地实现数据与 AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。这也是Android完全遵循MVC设计模式的体现。


Android提供很多的Adapter,列出常用几个:

ArrayAdapter(T)--------------------------------------------------------用来绑定一个数组,支持泛型操作

SimpleAdapter---------------------------------------------------------用来绑定在XML中定义的控件对应的数据

SimpleCursorAdapter-----------------------------------------------用来绑定游标得到的数据

BaseAdapter-----------------------------------------------------------通用的基础适配器




1.ListView使用ArrayAdapter

用ArrayAdapter可以实现简单的ListView的数据绑定。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView空间上。ArrayAdapter的使用如下:

在布局文件中加入一个ListView控件:

<?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="match_parent"
    android:orientation="vertical" 
    android:background="@drawable/hua">
<ListView
         android:id="@+id/lvcategory"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="20dp"
         android:layout_marginRight="20dp"
         >
      </ListView>    

</LinearLayout>

对应的activity:

package com.androidhomework.caipu;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

/*
1.定义一个数组来存放ListView中item内容;
2.通过实现ArrayAdapter的构造函数来创建一个ArrayAdapter的对象
3.通过ListView的setAdapter()方法绑定ArrayAdapter.*/

public class CategoryActivity extends Activity{
	private static final String[] strs = new String[]{
			"家常菜","汤粥","面食","甜点","小吃","海鲜"
	};
	private ListView lvcategory;
	
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.category_activity);
		
		lvcategory=(ListView)findViewById(R.id.lvcategory);//得到ListView对象的引用
		
		/*为ListView设置Adapter来绑定数据*/
		lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,strs));
		
	}
 }


使用步骤:
1.定义一个数组来存放ListView中item内容;
2.通过实现ArrayAdapter的构造函数来创建一个ArrayAdapter的对象
3.通过ListView的setAdapter()方法绑定ArrayAdapter

其中,第2步,ArrayAdapter有多个构造函数,例子中是最常用的一种。   第一个参数为上下文,第二个参数为一个包含TextView,用来填充ListView的每一行的布局资源ID,第三个参数为ListView的内容。其中,第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。:

a.通过指定android.R.layout.simple_list_item_checked,实现带选择框的ListView。需要用setChoiceMode()方法设定选择为单选还是多选。

代码:lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,strs));

         lvcategory.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

b.通过指定android.R.layout.simple_list_item_multiple_choice这个资源实现带CheckBox的ListView。同样的,需要用setChoiceMode()方法来设置单选还是多选

代码:

         lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,strs));

         lvcategory.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

c.通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButton的ListView。这里并不是指定了单选,多选单选还需要通过setChoiceMode(方法来制定

lvcategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_single_choice,strs));

         lvcategory.setChoiceMode(ListView.CHOICE_MODE_SINGLE);



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2972次
    • 积分:146
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条