@version:Android4.3 API18

@author:liuxinming

概述

              AdapterView继承了ViewGroup,它的本质是容器
              AdapterView 可以包含多个 “列表项”,并将多个“列表项”以合适的形式显示出来
              AdapterView显示的多个“列表项”由Adapter提供

类图




ListView(列表视图)

ListView以垂直列表的形式显示所有列表项

创建方式:

                          1、直接使用ListView创建
                          2、让Activity继承ListActivity(相当于该Activity显示的组件为ListView)
在程序中获得了ListView之后,接下来就需要为ListView设置它要显示的列表项
注释:ListView、GridView、Spinner、Gallery等AdapterView都只是容器,而Adapter负责提供每个“列表项”组件,AdapterView则负责采用合适的方式显示这些列表项。

XML属性

AbsListView属性

XML属性 相关方法 说明
android:choiceMode   设置AbsListView的选择行为,支持下列属性值
none:不显示任何选中项 value=0
singleChoice:允许单选 value=1
multipleChoice:允许多选 value=2
multipleChoiceModal:允许多选 value=3
android:DrawSelectorOnTop setDrawSelectoronTop(boolean) true:选中的列项将会显示在上面
android:fastScrollEnabled   设置是否允许快速滚动
true:显示滚动图标,并允许用户拖动该滚动图标进行快速滚动
android:listSelector setSelector(int) 指定被选中的列表项上绘制的Drawable
android:scrollingCache   true:该组件在滚动时将会使用绘制缓存
android:smoothScrollbar setSmoothScrollbarEnable(boolean) false:则不在header View之后绘制分割线
android:stackFromBottom   设置是否从底端开始排列列表项
android:textFilterEnable   设置是否对列表项进行过滤
注释:当该AbsListView对应的Adapter实现了Filter接口时该属性才会起作用
android:transcriptMode   设置该组件的滚动模式。该属性支持如下属性
disabled:关闭滚动。默认值
normal:当该AbsListView受到数据改变通知,且最后一个列表项可见时,该AbsListView将会滚动到底端
alwaysScroll:该AbsListView总会自动滚动到底端

ListView常用XML属性
android:divider 设置List列表项的分割线(即可用颜色分割,也可用Drawable分割)
android:dividerHeight 分割线的高度
android:entries 指定一个数组资源,Android将根据该数组资源来生成ListView
android:footerDividersEnabled false:则不在footer View之前绘制分隔线
android:headerDividersEnabled false:则不在header View之后绘制分隔线

使用数组创建ListView实例

Android_ListView/res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- 使用数组资源给出列表项 -->
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/code"
android:divider="#f00"
android:dividerHeight="2dp"
android:headerDividersEnabled="false"
/>
</LinearLayout>

Android_ListView/res/values/arrays.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string-array name="code">
<item>Android</item>
<item>PHP</item>
<item>Java</item>
<item>C</item>
<item>C++</item>
</string-array>
</resources>

调试效果
这是一个比较简单的案例,这种方式创建ListView能定制的内容很少



Adapter(接口)

     Adapter本身只是一个接口
     它派生了ListAdapter和SpinnerAdapter两个子接口,其中ListAdapter为AbsListView提供列表项,而SpinnerAdapter为AbsSpinner提供列表项

接口及其实现类的继承关系类图

    接口间接类较多,可能画的有点凌乱,我整理了很几次,看着也好像有点凌乱,呵呵。凑活着看吧


Adapter常用的实现类

1、ArrrayAdapter:简单、易用,通常用于数组或List集合的多个值包装成多个列表项
2、SimpleAdapter:功能有点强,可用于将List集合的多个对象包装成多个列表项
3、SimpleCursorAdapter:与SimpleAdapter基本相似,只是用于包装Cursor提供的数据
4、BaseAdapter:通常用于被扩展。扩展BaseAdapter可以对各列表项进行最大限度的定制

实现类一:ArrayAdapter实例

    设计场景:通过界面布局定义两个ListView,但这两个ListView都不指定android:entries属性(哈哈,区别来啦,前面一个简单例子,我们是通过配置XML数组资源)
                        我们通过Activity为两个ListView提供Adapter,Adapter来控制所显示的列表项
                        注释:这个有点像WEB开发的模板机制,定义好数据格式后,通过后端程序来控制数据资源需要显示的内容。
    Android_ListView/layout/Activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- 定义两个ListView -->
<ListView
android:id="@+id/list01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#f00"
android:dividerHeight="2dp"
android:headerDividersEnabled="false"
/>
<ListView
android:id="@+id/list02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#f00"
android:dividerHeight="2dp"
android:headerDividersEnabled="false"
/>
</LinearLayout>

Android_ListView/res/layout/array_item.xml

<?xml version="1.0" encoding="UTF-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:padding="10dp"
android:shadowColor="#f0f"
android:shadowDx="4"
android:shadowDy="4"
android:shadowRadius="2"
/>

Android_ListView/res/layout/checked_item.xml

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:checkMark="@drawable/ok"
android:shadowColor="#f0f"
android:shadowDx="4"
android:shadowDy="4"
android:shadowRadius="2"/>

Android_ListView/src/com/example/android_listview/MianActiviy.java

package com.example.android_listview;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView list01 = (ListView) findViewById(R.id.list01);
ListView list02 = (ListView) findViewById(R.id.list02);
//定义数组
String[] data1 = {"屌丝","高富帅","白富美"};
String[] data2 = {"Android","PHP","Java","C","C++"}; //将数组包装为ArrayAdapter
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>
(this,R.layout.array_item,data1);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>
(this,R.layout.checked_item,data2); //为ListView 设置 Adapter
list01.setAdapter(adapter1);
list02.setAdapter(adapter2);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

调试效果

 知识点:
             
 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>
(this,R.layout.array_item,data1)
             创建ArrayAdapter时必须指定的三个参数:

             1、Context:代表了访问整个Android应用的接口。
             2、textViewResourceld:一个资源ID,该资源ID代表一个TextView,该TextView组件将作为ArrayAdapter的列表项组件
             3、数组或List:该数组或List将负责为多个列表项提供数据


ListActivity实现列表

如果窗口仅仅需要显示一个列表,则可以直接让Activity继承ListActivity来实现,ListActivity的子类无需调用setContentView()方法来显示某个界面
而是可以直接传入一个内容Adapter,ListActivity子类就呈现出一个列表

Android_ListView/src/com/example/android_listview/MianActiviy.java
package com.example.android_listview;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter; /**
* @author LiuxinMing 1235355@qq.com
*/
public class MainActivity extends ListActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 无需使用布局文件
String[] arr = {"屌丝","高富帅","白富美"};
// 创建ArrayAdapter对象
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, arr);
// 设置该窗口显示列表
setListAdapter(adapter);
}
}

调试效果:





未完待续.....

Android开发10.1:UI组件适配器AdapterView(创建ListView,Adapter接口)的更多相关文章

  1. Android开发8:UI组件TextView,EditText,Button

    版本:Android4.3 API18 学习整理:liuxinming TextView 概述 TextView直接继承了View(EditText.Button两个UI组件类的父类) TextVie ...

  2. 50个Android开发人员必备UI效果源码[转载]

    50个Android开发人员必备UI效果源码[转载] http://blog.csdn.net/qq1059458376/article/details/8145497 Android 仿微信之主页面 ...

  3. Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式

    Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...

  4. 第3组UI组件:AdapterView及其子类

    1 AdapterView类简介 1.1 AdapterView组件是一组重要的组件,AdapterView本身是一个抽线类,实际使用更多的都是Adapter相关子类,AdapterView具有如下特 ...

  5. Android 开发:由模块化到组件化(一)

    在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发背后的哪些事.最早是在广告SDK中应用组件化,但是同样适用于普通应用开发 以下高能,请做好心理准备,看不懂请发私信来交流 ...

  6. Android 开发:由模块化到组件化

    在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发背后的哪些事.最早是在广告SDK中应用组件化,但是同样适用于普通应用开发 以下高能,请做好心理准备,看不懂请发私信来交流 ...

  7. UI组件之AdapterView及其子类(五)ListView组件和ListActivity

    ListView组件是一个显示组件,继承AdapterView基类,前面已经介绍了分别使用ArrayAdapter,SimpleAdapter,扩展BaseAdapter来为LisView提供列表项h ...

  8. Android开发10:传感器器及地图相关应用

    前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...

  9. 【Android】10.1 扩展组件库和其他视图--本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-18 1.主界面运行截图 2.MainActivity.cs文件中对应的代码 chItems.Add(new Chapter() ...

随机推荐

  1. 五毛的cocos2d-x学习笔记05-场景与场景动画,动作

    场景切换函数: Director->getInstance()->replaceScene(Scene*); Director->getInstance()->runWithS ...

  2. s3c2440栈分配情况(fl2440裸机 stack)

    //2440INIT.S ;The location of stacks UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~ SVCStac ...

  3. 我常用的iphone开发学习网站[原创]

    引用地址:http://www.cnblogs.com/fuleying/archive/2011/08/13/2137032.html Google 翻译 Box2d 托德的Box2D的教程! Bo ...

  4. 解决gnuplot中'Terminal type set to 'unknown'不能显示绘图的问题

    安装gnuplot: sudo apt-get install gnuplot 安装成功后,在终端输入gnuplot,进入gnuplot. 直接进行一个小测试: plot sin(x) 发现不能显示绘 ...

  5. JavaScript时钟实例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. php定时自动执行 需启动第一次

    1 2 3 4 5 6 7 8 9 10 11 12 <? ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_li ...

  7. eval以及json

    参考 http://www.cnblogs.com/artwl/archive/2011/09/07/2169680.html http://www.cnblogs.com/objectorl/arc ...

  8. 数据切分——MySql表分区概述

    定义:         表的分区指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现数据分割的规则被称为分区函数,这在M ...

  9. python爬虫实战1

    转载于:http://blog.csdn.net/dongnanyanhai/article/details/5552431 首先推荐一个网站:中医世家,这个网站上有很多关于中医的资料,光是提供的中医 ...

  10. vs使代码可以折叠的方法

    set [工具]->[选项]->[文本编辑器]->[C/C++]->[查看]->[大纲显示]->[大纲语句块] = True