Android之ListView——ArrayAdapter的用法学习

当我们使用ListView时,必不可少的便会使用到adapter,adapter的用处就像是一个水管接口,把你想展现的数据与你希望展现的布局样式通过某种协定结合起来。

ArrayAdapter针对每个你想展示的列表项情况,你需要定义一个你的ArrayAdapter, 下面介绍一下如何定义一个你想要的水管接口:

对于每一项的展示内容,你需要设定一个对应的数据类,比如说你想展示一个城市列表,每项中有一个TextView和CheckBox,显示一个城市和它的选中情况,理论上你的数据类中就需要提供这些所想展示的数据,为了数据和视图对应得上,我们需要重写getView方法:   "getView(int position, View convertView, ViewGroup parent)"  参数含义是:position:当前所绘制项在适配器中所处下标,你也可以理解为正在绘制第几个数据源的视图; convertView:当前传入的列表视图,可能为空,可能不为空(将当前不可见的视图复用);parent,父容器

1 if(convertView == null){
2                 convertView = getActivity().getLayoutInflater()
3                         .inflate(R.layout.list_item_crime, null);
4                 Log.i(TAG, "line 51");
5             }

上面是一段很重要的代码,它的含义是仅当检查到传入的绘制视图为空时,才会先建一个视图加入列表中;重用视图的意义在于尽量减少对视图的不必要消耗,想象有超过100项的列表,你的屏幕上只能显示其中的10项,那你就需要一直维护暂时不需要用到的90项的视图,1%的利用率,所以我们需要重用视图,当视图往下滑时,当有项消失不见时,这时的视图就会被传入到新项绘制的getView函数中作为参数:convertView,再去复写:假设我的数据源是一个CityItem,有两个值一个是城市名称,一个是该城市是否处于选中状态;这时为了能展示出来,我的布局选项 “R.layout.list_item_crime” 就需要对应有一个TextView 和 CheckBox,通过findViewById找到对应组件后赋值:

 1 @Override
 2         public View getView(final int position, View convertView, ViewGroup parent) {
 3             if (convertView == null) {
 4                 convertView = getLayoutInflater().inflate(
 5                    R.layout.city_list_item, null);//希望展示出来的布局样式,内含有一个textview和checkbox,id分别是R.id.city_name和R,id.isSelected
 6             }
 7         CityItem c = cityItems.get(position);
 8             TextView titleView = (TextView) convertView
 9                     .findViewById(R.id.city_name);//通过Id找到组件
10         titleView.setText(c.getName());//赋值
11
12              CheckBox selectedCheckBox = (CheckBox) convertView
13                     .findViewById(R.id.isSelected);
14
15             selectedCheckBox.setChecked(c.getSelected());
16         return convertView;
17 }

之后你也可以自定义一个构造方法,

1 public CityAdapter(ArrayList<CityItem> crimes,Context context) {
2             super(context, 0, crimes);
3         }

这样我建立一个适配器时只用传入我关心的数据源和上下文,这样一个自定义的ArrayAdapter就写好了;

怎么用呢?找到对应的ListView视图,加入适配器即可,

1 cityAdapter = new CityAdapter(cityItems, this);
2 cityList.setAdapter(cityAdapter);
时间: 2024-11-03 21:52:25

Android之ListView——ArrayAdapter的用法学习的相关文章

Android之ListView——ArrayAdapter的学习与总结

问题:当ListView选定的ListItem视图中存在一些UI组件,如CheckBox,出于对状态保存的期望,发现当勾选后将列表往下滑再滑回去时,意外地发现状态没有保存 解决过程: 1)思考后想到这个原因是因为重用了convertView,当重用converView时,原先勾选的状态没有保存,又被新的数据源覆盖,重点代码为: if (convertView == null) { convertView = getLayoutInflater().inflate( R.layout.city_l

Android listview与adapter用法

listview与adapter用法 博客分类: android 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常简单. 一个ListView的创建需要3个元素. (1)ListView中的每一列的View. (2)填入View的数据或者图片等. (3)连接数据与ListView的适配器. 也就是说,要使用ListView,首先要了解什么是适配器

Android下ListView的学习

Android下ListView的学习 文字加图片的ListView 1.添加图片文件 在res下drawable-hdpi文件里添加所需的图片资源: 例:guide1.jpg,guide2.jpg,guide3.jpg,guide4.jpg,guide5.jpg,guide6.jpg,guide7.jpg,guide8.jpg. 2.MainActivity.java文件 1 package com.example.listview; 2 3 import java.util.ArrayLis

13、Android之ListView学习&#183;

1.XML文件中添加ListView (1)XML布局文件 <RelativeLayout 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_

Android课程---关于ListView列表视图的学习

activity_ui3.xml <?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

38.Android之ListView简单学习(一)

android中ListView用的很普遍,今天来学习下,本篇主要以本地数据加载到listview,后面会学习从网络获取数据添加到listview. 首先改下布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layou

Android train——ListView绑定ArrayAdapter、SimpleAdapter、SimpleCursorAdapter、BaseAdapter

ListView绑定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

第一章,listview的简易用法(Android)

这篇文章主要是练习了安卓listview的arrayadapter和baseadapter的简单填充. 1.arrayadapter填充 布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare

android 开发-ListView与ScrollView事件冲突处理(事件分发机制处理)

ListView和ScrollView都存在滚动的效果,所以一般不建议listView和scrollView进行嵌套使用,但有些需求则需要用到两者嵌套.在android的学习中学了一种事件分发处理机制. 如果listView显示在UI上部,而如imageView等显示在UI下部. 首先为listView注册一个滑动监听事件 通过为listView设置固定高度,并注册滑动监听事件.在划动监听事件中,记录用户是否滑动至listView数据底部. 通过activity的dispatchTouchEve