列表控件ListView和适配器Adapter

转载 2015年11月18日 10:28:16

学习笔记


一个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);



Android - ListView自定义适配器Adapter中获得EditText的值

两个xml布局文件 [java] view plaincopy main.xml      "1.0" encoding="utf-8"?>  ...
  • lotusyangjun
  • lotusyangjun
  • 2015年05月06日 15:14
  • 2569

7、ListView的几种适配器及自定义适配器

ListView是我们在Android应用开发中常用的组件,它通过列表的形式展示数据,具有很强的可扩展性,通常使用还会给每一项绑定一个点击时间,用于处理相应的请求,ListView在电商的商品列表中是...
  • li460998973
  • li460998973
  • 2014年12月02日 21:41
  • 5650

android ListView自定义适配器实现

android 自定义适配器自定义适配器实现步骤 一,继承BaseAdapter 二,添加数据集合和反射器实现构造器和setter方法 三,实现getCount,getItem,getItemI...
  • Maybe_ch
  • Maybe_ch
  • 2017年03月04日 23:51
  • 588

Adapter类型控件之Adapter(数据适配器)

(一)概述 Adapter是作为连接数据跟View之间桥梁的,你可以创建一个View来使用Adapter来对数据直接进行填充; (二)Adapter(适配器)的使用 先来看看他的类结构图...
  • MakeYourChance
  • MakeYourChance
  • 2016年06月24日 21:52
  • 4165

Android源码之ListView的适配器模式

通过增加Adapter一层来将Item View的操作抽象起来,ListView等集合视图通过Adapter对象获得Item的个数、数据元素、Item View等,从而达到适配各种数据、各种Item视...
  • bboyfeiyu
  • bboyfeiyu
  • 2015年02月26日 09:12
  • 9816

ListView的优化和自定义适配器继承于BaseAdapter

ListView的优化和万能适配器继承于BaseAdapter          在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由...
  • u013128651
  • u013128651
  • 2016年03月21日 20:14
  • 2733

ListView,GridView和适配器Adapter不得不说的秘密

ListView,GridView和适配器Adapter不得不说的秘密,欢迎进来看。。。
  • j06100610
  • j06100610
  • 2015年08月14日 23:36
  • 2479

ListView的几种适配器及自定义适配器

ListView是我们在Android应用开发中常用的组件,它通过列表的形式展示数据,具有很强的可扩展性,通常使用还会给每一项绑定一个点击时间,用于处理相应的请求,ListView在电商的商品列表中是...
  • zengguangchun
  • zengguangchun
  • 2016年10月19日 15:50
  • 4035

Android 源码解析之Adapter和AdapterView与适配器模式

概述在Android中大量存在着适配器模式,其中的设计思路就是Adapter(提供数据)设在到AdapterView(展示数据集合的视图),其中Adapter体系结构如下而AdapterView有Li...
  • wbwjx
  • wbwjx
  • 2016年10月11日 23:55
  • 1645

打造万能Adapter(适配器)——适用于ListView、GridListView

整理总结自鸿洋的博客:http://blog.csdn.net/lmj623565791/article/details/38902805
  • lvyoujt
  • lvyoujt
  • 2016年06月11日 10:38
  • 5662
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:列表控件ListView和适配器Adapter
举报原因:
原因补充:

(最多只允许输入30个字)