Adapter和AdapterView之间的关系

总述

Android中“列表”的实现其实一个典型的MVC模式,其实中AdapterView相当于是View,负责视图的绘制以及视图的事件响应,Adapter相当于是Controller,负责控制数据的显示内容和展现方式,另外项目中的实体类则是代表了Model。

Adapter

Adapter其实是个接口,并不是一个具体的类。它的主要最用就是作为一个AdapterView和Model间的桥梁,这一点在源码中有很清楚的定义:

 代码如下 复制代码
/**
* An Adapter object acts as a bridge between an {@link AdapterView} and the
* underlying data for that view. The Adapter provides access to the data items.
* The Adapter is also responsible for making a {@link android.view.View} for
* ... ...
*/

getView()是Adapter非常重要的函数之一,这个函数的主要作用就根据在"列表"中位置的不同而展示不同的数据。具体可详见该方法的源码注释,上面已写的非常清楚了。
另一个就是registerDataSetObserver()和unregisterDataSetObserver(),好吧,应该是一对,这其实就是典型的一个观察者的设计模式,如果Adapter中需要加载的数据发生了变化,则我们就是通知Adapter来更新数据。当然,我们一般在项目中使用的是notifyDataSetChanged()方法,这是因为BaseAdapter不仅继承了Adapter,而且还对其中的一些方法进行封装,这其中就包括了DataSetObservable的notifyChanged()方法,源码如下:

 代码如下 复制代码

 /**
* Notifies the attached observers that the underlying data has been changed
* and any View reflecting the data set should refresh itself.
*/
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
AdapterView

AdapterView也是一个抽象类,例如AbListView等都是继承它而来。AdapterView中主要是一些监听器的设定,如:

Item 长按监听器

 代码如下 复制代码

public interface OnItemLongClickListener {
/**
* Callback method to be invoked when an item in this view has been
* clicked and held.
*... ...
*/
boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id);
}

Item 点击监听器

 代码如下 复制代码

public interface OnItemClickListener {

    /**
* Callback method to be invoked when an item in this AdapterView has
* been clicked.
*... ...
*/
void onItemClick(AdapterView<?> parent, View view, int position, long id);
}

还有最常用且基本的等方法,如:

 代码如下 复制代码

/**
* Returns the adapter currently associated with this widget.
*... ...
*/
public abstract T getAdapter();
/**
* Sets the adapter that provides the data and the views to represent the data
* in this widget.
*... ...
*/
public abstract void setAdapter(T adapter);

虽然AdapterView只是一个抽象类,但是其中的"干货"确实不是少,有着许多非常有用但是不常用的方法,如:

 代码如下 复制代码

 public boolean performItemClick(View view, int position, long id) {
if (mOnItemClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
if (view != null) {
view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
}
mOnItemClickListener.onItemClick(this, view, position, id);
return true;
}
return false;
}

顾名思义这是一个可以实现自动点击Item的方法,当你需要时直接使用可以省去不少的功夫。

结语

其实是由于上一篇文章探究Android中Listview显示错乱问题,引起我对探究ListView的内部源码的兴趣,当然由于水平有限只是从比较浅层的角度进行了探究,以后有时间定会继续研读源码

时间: 2024-09-28 15:46:42

Adapter和AdapterView之间的关系的相关文章

java-Map Listview adapter 之间的关系是什么

问题描述 Map Listview adapter 之间的关系是什么 Map Listview adapter 之间的关系是什么 Map Listview adapter 之间的关系是什么 解决方案 Map 是用来存储数据的,他可以作为Listview的数据源,Listview是列表组件,他需要搭配adapter去显示数据,adapter中有getview方法,可以处理item视图 解决方案二: listview是列表视图 adapter 是 每一个item 的 适配器 map;list 是数据

总结java实现八大排序算法及之间的关系

8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的.如此反复循环,直到全部排好顺序. (2)实例 (3)用java实现 [java] view plaincopy package com.njue; public class insertSort { public insertSort(){ inta[]={49,38,65,97,76,13,27,

slf4j-api、slf4j-log4j12以及log4j之间的关系

几乎在每个jar包里都可以看到log4j的身影,在多个子工程构成项目中,slf4j相关的冲突时不时就跳出来让你不爽,那么slf4j-api.slf4j-log4j12还有log4j是什么关系?      slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade.Facade门面,更底层一点说就是接口.它允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统.更直观一点,slf4j是个数据线,一端嵌入程序,另一端链接日志系统,从而实现将

UIView的alpha、hidden和opaque属性之间的关系和区别[转]

UIView的alpha.hidden和opaque属性之间的关系和区别 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/10076323 转载请注明出处   UIView的这几个属性让我困惑了好一阵子,通过翻看官方文档和stackoverflow等网上资源,对它们有了一定理解,现分享出来.如理解有误,还请大家指出.   一.alpha 液晶显示器是由一个个的像素点组成的,每个像素点都可以显示一个由RGBA颜色空间组成

XML和数据库之间的关系

xml|数据|数据库  1.0 简介    本论文简要的探讨了XML和数据库之间的关系,同时列出一些可以使用数据库处理XML文档的软件. 虽然这里不打算详尽地介绍这些软件,但是笔者希望它能够描述使用数据库处理XML文档中的主要部分.这里有点偏向与关系数据库,因为我的经验如此.     2.0 XML是数据库吗?     在开始讨论XML和数据库之前,我们需要回答一个萦绕在很多心头的问题: "XML是数据库吗?"在严格意义上将,如果"XML"是指XML文档时,答案是&

构架、框架、设计模式之间的关系简述

设计 一.软件体系结构和框架的定义 软件体系结构的英文单词是"architecture". Architecture的基本词义是建筑.建筑学.建筑风格. 软件体系结构虽然根植于软件工程,但还处于一个研究发展的阶段,迄今为止还没有一个为大家所公认的定义. <设计模式>中对框架的定义是框架就是一组相互协作的类,对于特定的一类软件,框架构成了一种可重用的设计. 软件框架是项目软件开发过程中提取特定领域软件的共性部分形成的体系结构,不同领域的软件项目有着不同的框架类型.框架的作用在

中文Access2000速成教程--1.8 定义表之间的关系

access|教程|速成|中文 第八讲 定义表之间的关系 前面定义了主键,以及相应的表后,就可以制定各表部的关系,从而建立起一个关系数据库.的应用与管理关系数据库,中文Access 2000具有很强的能力,这正是中文Visual FoxPro 6与中文Excel 2000所不及的.为了建立关系数据库,首先要建立好各相关表,接着将它们全部关闭,即可按下列步骤进行操作. 注意:中文Access 2000不能在已打开的表之间创建或修改关系,所以要关闭所有打开的表,这与中文Visual FoxPro 6

浅谈网站优化之新访客和老访客之间的关系

我们都知道现在大部分网站我们都依靠搜索引擎,我们不断的优化.不断的提高访问量,当我们网站IP逐步增高的同时我们沉浸在胜利的喜悦中,可我们却忽略新访客增加的数据和老访客增加的数据不成比例!这就要我们思考的问题了,所以做为一个站长我们对数据的分析不能忽视!下面我就来简单探讨下网站新访客和老访客之间的关系!   (上图为网站A 数据来源:百度统计 截图后为方便大家看做成了一张图片)   (上图为网站B 数据来源:百度统计 截图后为方便大家看做成了一张图片) 上面2个图片,分别为网站A 网站B,在这里笔

探讨网站权重与关键字权重之间的关系

探讨:网站权重与关键字权重之间的关系,我们知道对于一个网站而言,其关键字可以是几个,十几个,也或者是几十个,甚至上百个,网站的规模似乎也就决定了网站关键字的数量多少,一般对于一个企业站而言,其会有3~5个目标关键词,除了这些目标关键词之外,剩下的就是一定数量的长尾关键词. 下面我们来看看关键字排名是如何进行的:一般网站相关优化流程是,先选择目标关键词来做,对一部分目标关键词进行站内文章,站外外链等,通常需要做哪一个关键词就会对某一个关键词进行优化,从这种意义上来讲,其目的就是提高此关键词在整个网