一、适配器接口Adapter继承体系

Adapt是一个接口,是联通多条目控件AdaptView(ViewGroup是其父类,ListView、GridView、SpinnerView是其子类)与数据集的桥梁,主要有两个功能:1)决定多条目控件AdaptView子视图(如ListView)有多少项,即数据集有多少项;2)决定每一项如何显示,即XML视图布局和属性,属性值由数据集提供。继承体系如下图:

Adapter定义的抽象函数主要包括:

</pre><pre name="code" class="java"><pre name="code" class="java">//注册一个observer,如果数据集发生变化(如增加、删除等等)将会执行
void registerDataSetObserver(DataSetObserver observer);
//取消注册observer
void unregisterDataSetObserver(DataSetObserver observer);
//显示有多少个数据项,即adaptView有多少个子节点
int getCount();
//返回数据集中position位置所对应的数据项
Object getItem(int position);
//返回position位置所对应的Id号,通常即为position
long getItemId(int position);
//核心函数,返回position数据项所对应的子节点View
View getView(int position, View convertView, ViewGroup parent);

ListAdapter接口和SpinnerAdapter接口

ListAdapter接口和SpinnerAdapter接口继承自Adapter。ListAdapter接口是ListView控件与数据集之间的桥梁,该接口只增加了两个方法:

//表示适配器adapter中的数据项items是否可用,如果数据项有变动,表明数据可靠性无法保证。如果返回值为true,表明items(所对应的view)是可选中、可点击的
public boolean areAllItemsEnabled();
//返回值为True,如果position多对应的项是可点击的或可选中的。
boolean isEnabled(int position);

spinnerAdapter接口是spinner控件与数据之间的桥梁,该接口增加了一个方法:

//用下拉窗口显示position所对应的数据项,作用与getview()方法类似
public View getDropDownView(int position, View convertView, ViewGroup parent);

二、适配器基类BaseAdapter

适配器类继承体系如下图:

适配器基类BaseAdapter定义如下:

public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter

适配器基类BaseAdapter有继承自接口,即ListAdapter, SpinnerAdapter,表明BaseAdapter及其子类能够很好处理AdapterView的所有子类视图,如ListView,SpinnerView等等。

基类方法如下:

//实现注册Observer,监控数据集变化public void registerDataSetObserver(DataSetObserver observer) {mDataSetObservable.registerObserver(observer);}//实现取消注册Observerpublic void unregisterDataSetObserver(DataSetObserver observer) {mDataSetObservable.unregisterObserver(observer);}//核心函数,通知绑定的observer数据发生变化,因更新相应的View视图
public void notifyDataSetChanged() {mDataSetObservable.notifyChanged();}//实现针对下拉菜单的getDropDownView方法,获取方式等价于getView
public View getDropDownView(int position, View convertView, ViewGroup parent) {return getView(position, convertView, parent);}

三、继承BaseAdapter的适配器:数组适配器ArrayAdapter

查看API描述可知,ArrayAdapter默认搭建的是TextView视图与(String)数据集之间的桥梁,即如果ListView+ArrayAdapter+数据集,ListView子视图只能是文本TextView,如果希望子视图能显示更多布局形式,比如ImageView,则需要重写getView函数,但通常都是直接继承BaseAdapter定制个性的显示视图,而不是继承数组适配器。

ListView+ArrayAdapter+String[],实际上采用了MVC设计模式,将前端显示(ListView)与后端数据String[]进行分离,也就是说视图ListView不直接读取数据,而是通过ArrayAdapter进行控制,建立视图与数据的交互,ArrayAdapter相当于MVC中的控制器C,ListView相当于MVC中的视图V。

ArrayAdapter有6个构造函数,但最后都是调用init()函数,resource指的是XMl资源值,如果textViewResourceId=0,则resource根节点只能是TextView,用此XML布局AdapterView中的子节点,如果textViewResourceId=R.id.XXX,指textViewResourceId是XML布局中某个TextView节点,用此节点布局AdapterView中的子节点,最后一个是数据集列表。

private void init(Context context, int resource, int textViewResourceId, List<T> objects) {mContext = context;mInflater= (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);mResource = mDropDownResource = resource;mObjects = objects;mFieldId = textViewResourceId;}

ListView+ArrayAdapter的一个简单Demo如下:

package com.study.listviewstudy;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listview=(ListView) findViewById(R.id.listview);ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, R.layout.model, R.id.model,getResources().getStringArray(R.array.hero));//读取strings文件中的数组herolistview.setAdapter(adapter);        }
}

新建的布局XML:R.layout.model

<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_parent"><!-- 建立一个textView节点 --><TextView android:id="@+id/model"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="50sp" /></RelativeLayout>

效果图:
 

高级控件AdapterView(一):Adapte继承体系及BaseAdapter相关推荐

  1. Android高级控件----AdapterView与Adapter详解

    在J2EE中提供过一种非常好的框架--MVC框架,实现原理:数据模型M(Model)存放数据,利用控制器C(Controller)将数据显示在视图V(View)上.在Android中有这样一种高级控件 ...

  2. android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

    我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助 什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时) Android中Adapter类其 ...

  3. RecyclerView高级控件-附实例【android专题】

    RecyclerView高级控件 RecyclerView是Android 及其重要的一个高级UI控件,使用频率及其的高,APP的90%以上的页面都会使用的到.由于其出色的性能和插拔式的架构设计,被全 ...

  4. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第八章:高级控件

    本章介绍了App开发常用的一些高级控件用法,主要包括:如何使用下拉框及其适配器.如何使用列表 类视图及其适配器.如何使用翻页类视图及其适配器.如何使用碎片及其适配器等.然后结合本章所学 的知识,演示了 ...

  5. Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能

    Android高级控件(一)--ListView绑定CheckBox实现全选,增加和删除等功能 这个控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adap ...

  6. Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现...

    Android高级控件(二)--SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现 写这个的原因呢,也是因为项目中用到了gif动画,虽然网上有很多的架包可以实现,不过我们还 ...

  7. Android从入门到进阶之高级控件

    高级控件 1.自动完成文本控件 在搜索引擎(百度.搜狗)输入几个文字,会出来一些提示.可以减少用户的输入,提高程序的效率.刚才看到的自动提示,ajax技术. 1.1AotoCompleteTextVi ...

  8. Android 高级控件(七)——RecyclerView的方方面面

    Android 高级控件(七)--RecyclerView的方方面面 RecyclerView出来很长时间了,相信大家都已经比较了解了,这里我把知识梳理一下,其实你把他看成一个升级版的ListView ...

  9. 移动开发技术(Android)——实验5 Android高级控件的应用

    移动开发技术--实验5 Android高级控件的应用 一.实验目的 二.实验内容 1.Spinner.ListView控件与Adapter适配器(一) 2.Spinner.ListView控件与Ada ...

最新文章

  1. javascript迭代器_JavaScript符号,迭代器,生成器,异步/等待和异步迭代器-全部简单解释...
  2. androidwakelock_Android中的WakeLock
  3. Docker网络相关
  4. hdu4965 巧用矩阵乘法结合律
  5. 转:linux svn常用命令
  6. rust(13)-闭包作为参数 trait泛型
  7. poi excel设置合并单元格边框格式
  8. mongodb 存储过程 遍历表数据_mongodb推荐存列表字段还是多条记录?
  9. java字节流分为_Java文件流可分为字节流和字符流。
  10. Webstorm的常用快捷键
  11. 知云文献阅读器_知云文献翻译
  12. python索引右往左_左手用R右手Python系列5——数据切片与索引
  13. iOS-国家代码选择功能github开源分享
  14. hdu1711(kmp纯模板)
  15. GenyMotion 配合 Android Studio 的安装
  16. 计算机毕业设计java+jsp报刊订阅信息网站(源码+系统+mysql数据库+Lw文档)
  17. [工具]Microsoft To-Do,简约还是简陋?
  18. EMV TLV 总结
  19. 数字电子技术《优先编码器74LS148》仿真
  20. 国内各大短视频平台去水印下载内容,新年限时免费使用。

热门文章

  1. 【无标题】Python 应用POS信息写入JPG exif
  2. 使用Beetle简单构建高性能Socket tcp应用
  3. 同义词 synonym
  4. 《iOS10系列越狱,需要知道的都在这。》
  5. excel关联规则算法_Excel名称有哪些规则?
  6. DW1000开发笔记(四)DW1000使用轮询方式发送数据
  7. 【源码分享下载】一款基于微客服的仿微信的聊天软件
  8. TensorFlow之神经网络layers模块详解
  9. 小清新的jQuery ck-slide 图片轮播
  10. 从kenko入华经历一窥海外电商与中国市场的艰难磨合