第十九讲:ListView与Adapter(一)

天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为。——《孟子·告子下》

本讲内容:ListView列表组件 与 Adapter适配器的用法

一、ListView列表组件:

作用:ListView通常有两个职责。

(1)将数据填充到布局。

(2)处理用户的选择点击等操作(通过绑定监听器)。

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

(1)ListView展示每一列的View。

(2)填入View的数据或者图片等。

(3)连接数据与ListView的适配器。

ListView的使用步骤:

(1)定义一个data

(2)创建一个Adapter对象

(3)绑定适配器

二、Adapter适配器:

什么是Adapter适配器?适配器就是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,前面我们学过的Spinner也是)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。Android中提供了很多的Adapter,各种Adapter转换的方式和能力不一样,下面介绍常用的几个。

Adapter 作用
ArrayAdapter<C> 用来绑定一个数组,支持泛型操作
SimpleAdapter 用来绑定在xml中定义的控件对应的数据
SimpleCursorAdapter 用来绑定游标得到的数据
BaseAdapter 通用的基础适配器

我们通过下面例子感受一下,代码的讲解都写在注释里了。

三、 ListView使用ArrayAdapter

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

下面是res/layout/activity_main.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:orientation="vertical"
    tools:context="com.example.text.MainActivity$PlaceholderFragment" >

 <TextView
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="零基础学Android"
     android:gravity="center"
     android:textSize="30sp"
     android:textColor="#ff00ff"/>

 <ListView
     android:id="@+id/listViewId"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"/>

</LinearLayout>

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity {
	private ListView listView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		listView = (ListView) findViewById(R.id.listViewId);
		// 定义数组
		String[] data = { "零基础学Android 第一讲", "零基础学Android 第二讲",
				          "零基础学Android 第三讲", "零基础学Android 第四讲",
				          "零基础学Android 第五讲", "零基础学Android 第六讲",
				          "零基础学Android 第七讲", "零基础学Android 第八讲",
				          "零基础学Android 第九讲", "零基础学Android 第八讲"};
		//为ListView提供数组适配器
		ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, data);
		//为ListView绑定适配器
		listView.setAdapter(adapter);
		//设置为单选
		listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

		//为ListView设置列表项点击监听器
		listView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?>parent, View view,int position, long id) {
				//点击后在标题上显示点击了第几行
				setTitle("你点击了第"+position+"行");
			}
		});

		//为ListView设置长按监听器
		listView.setOnItemLongClickListener(new OnItemLongClickListener() {
			@Override
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(getApplicationContext(),"您长按的是:"+((TextView) view).getText(), Toast.LENGTH_SHORT).show();
				return false;
			}
		});
	}
}

ArrayAdapter<CharSequence>,具有三个参数:

第一个是conetxt,也就是application的环境,可以设置为this,也可以通过getContext()获取.

第二个参数是ListView未展开的UI格式 ,注意是Android系统内自定义的(我们也可以自定义ListView的UI格式)

第三个参数是从data source中的array ID也可以自定义的data

通常我们使用Android提供的资源,除了例子中所用的,常用的还有如下几种,可实现带RadioButton和CheckBox的ListView。

一般  android.R.layout.simple_list_item_1

(1)通过指定android.R.layout.simple_list_item_checked这个资源,实现带选择框的ListView。

需要用setChoiceMode()方法设定选择为多选还是单选,否则将不能实现选择效果

(2)通过指定android.R.layout.simple_list_item_multiple_choice这个资源实现带CheckBox的ListView。

同样的,需要用setChoiceMode()方法来设置单选或者多选

(3)通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButton的ListView。这里要注意的是,

这里并不是指定了单选。是多选还是单选要通过setChoiceMode()方法来指定

下面是运行结果:

本讲到这里,谢谢大家!

时间: 2024-08-06 07:55:23

第十九讲:ListView与Adapter(一)的相关文章

第十九讲:ListView与Adapter(二)

会当凌绝顶,一览众山小. -- 杜  甫<望岳> 本讲内容:ListView列表组件 与 Adapter适配器的用法 一.ListView使用SimpleAdapter 很多时候需要在列表中展示一些除了文字以外的东西,比如图片等.这时候可以使用SimpleAdapter.可以通过它 使用simpleAdapter的数据一般都是用HashMap构成的列表,列表的每一节对应ListView的每一行.通过SimpleAdapter的构造函数,将HashMap的每个键的数据映射到布局文件中对应控件上.

第三十九讲:Android之AndroidManifest.xml文件中注册权限

积土而为山,积水而为海.--<荀子·儒效> 本讲内容:android权限详细 1 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 2 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 3 获取精确位置 android.permission.ACCESS

第五十九讲:四大组件之BroadcastReceiver(二)

没有任何动物比蚂蚁更勤奋,然而它却最沉默寡言. 本讲内容: Broadcast Receiver 广播接收者的使用 上一讲我们讲解了一个接收者来接收广播,如果有多个接收者都注册了相同的广播地址,又会是什么情况呢,这就涉及到普通广播和有序广播的概念了. 一.普通广播(Normal Broadcast) 普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响.对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作. 我们新建二个Broad

Scratch第四十九讲:完美的下落和反弹

做了很多小游戏,都会遇到碰撞和反弹的情况,CC哥大多时候也都是简单处理一下,包括之前的讲座也有提过,但是没有认真的讲解过.今天就专门为这个主题做一讲,把这部分内容彻底讲透,大家可以一起探讨一下. 是不是觉得很简单,就是一个小球落到地上再弹起来,但是让我们一起来过过这个下落反弹里面有多少坑. 1:匀速下坠 先来看下落,一个最简单的下落程序是这样的: 小球匀速下落,碰到黑线停下来.这肯定不完美,因为下坠应该是加速度的,而不是匀速的.v=at,这是加速度公式.所以下坠的每一步都随着时间的增加,下坠的距

UI第十九讲:数据库

一.数据库管理系统 二.SQL语句 三.iOS的数据库技术的实现

第二十九讲:基础四依赖倒转原则

细节:实现层,

第十九讲:职责链模式

public class CarBodyHandler extends CarHandler{ @Override public void HandlerCar() { // TODO Auto-generated method stub System.out.println("组装车身"); } } public abstract class CarHandler { public abstract void HandlerCar(); } public class CarHeadH

逆向第十九讲——类继承和成员类、运算符重载、模板逆向20171211

一.类继承逆向 在C++中使用到继承,主要是为了实现多态,那么多态就必须会用到虚函数,即会产生虚表指针. (1)父类和子类中有没用到虚函数的四种情形 1)父类和子类中都没有用到虚函数 如果父类和子类中都没有用到虚函数,那么子类中就只是继承了父类中的成员变量和成员函数,当然还得视父类中成员变量和成员函数的公有私有性质和继承方式而定,在此继承中有一种特殊形式,当父类和子类中含有同名同参数同返回值的函数时,用父类对象指针调该函数,则调的是父类中的该函数,用子类对象指针调该函数时,调的是子类中的而该函数

布局与控件(九)-ListView的Adapter们

第10节 ListView的Adapter 安卓系统为ListView设计了多种Adapter作为它的搭档.每种Adapter不仅为ListView提供数据内容,也会告诉ListView如何展示这些数据-规定好列表项的长相. 这些Adapter都是从Adapter类继承而来的,它们的关系如下: 这里我们选择性的介绍常见的2种Adapter-ArrayAdapter和SimpleAdapter. 10.1 ArrayAdapter ArrayAdapter是最简单的Adapter,我们在前面已经使