android中的几种适配器&观察者&ListView

1.我们知道Android中的Adapter类是处于ListView和数据源之间的数据总线,它负责为ListView提供数据。

2.适配器(BaseAdapter)中提供了一个notifyDataSetChanged()方法,当数据源中的数据发生变化时,可以通过调用该方法去通知ListView更新界面上的数据。

3.常见的三种adapter它们可以显示的数据的区别在哪里:

  • ArrayAdapter,数据源中只能是文本数据,只要传入的显示每行的布局View是TextView类型或者包含TextView控件即可。
  • SimpleAdapter,数据源中可以有图片或文本,显示控件集合和图片、文本数据集合可以通过两个数组对应传入。
  • CursorAdapter,为访问数据库而定义。

从上面的类图,可以看到:

  • 抽象类BaseAdapter更灵活,如果自定义自己的Adapter集成它更合理。
  • Adapter的地位就像观察者模式中的Subject。
  • 在给UI指定Adapter时,必须要给Adapter注册一个观察者,这样当调用者调用adapter的notifyDataSetChanged()方法时,才可以更新自己UI,所以顶用者必须自定义
    DataSetObserver对象,用以处理数据变化时的UI更新。
  • mDataSetObservable是一个聚合对象,也就是说它里面可以放多个观察者,所以调用者可以在同一个adapter中注册多个
    DataSetObserver 对象,这样当数据发生变化时,可以有多个不同的处理逻辑。

上图为ListView的setAdapter()方法中的片段,可以看到,在给ListView设置adapter数据源时,同时给adapter数据源注册了一个观察者。

而这个观察者回调中的处理方法正是用以处理ListView的UI更新,其实现源代码如下图。

完成整个数据更新过程如下:

  1. UI(ListView)在给自己设置数据源时(setAdapte())时,同时向Adapter的mDataSetObservable成员中注册了一个观察者回调监听器,该监听器负责用变化后的数据刷新UI。
  2. 当数据源发生变化时,先调用adapter的notifyDataSetChanged()方法,这时adapter负责将自己注册的所有观察者都通知一遍,告诉它们数据发生变化了。
  3. 因为第一步已经注册了观察者,自然UI就得到了更新。

几种适配器&观察者&ListView之间的那点事的更多相关文章

  1. Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  2. Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器

    一.写在前面: 本次我们来讲解一下Android应用中三个适配器:BaseAdapter.SimpleAdapter和ArrayAdapter.其中常见的是BaseAdapter,也是个人推荐使用的适 ...

  3. (转载) Android-Spinner的使用以及两种适配器

    目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选      程序员8月书讯      项目管理+代码托管+文档协作,开发更流畅 Android-Spinner的使用以及两种适配器 201 ...

  4. listview的两种适配器

    一. ArrayAdapter ListView listView = (ListView) findViewById(R.id.list_view);//ListView的参数为id listVie ...

  5. android listview 三种适配器设置

    1: public class ArrayAdapterActivity extends ListActivity { @Override public void onCreate(Bundle sa ...

  6. 【Android自学日记】两种适配器的使用

    ArrayAdapter适配器: (1)用于显示基本的文字内容 (2)基本使用过程:新建适配器---创建或加载数据源---适配器加载数据源---视图加载适配器 ArrayAdapter(上下文,当前L ...

  7. 【Android】以BaseAdapter做适配器的ListView及其性能优化

    适配器的Java类 package com.app.adapter; import org.json.JSONArray; import org.json.JSONObject; import and ...

  8. 【Android】以SimpleAdapter做适配器的ListView和GridView

    SimpleAdapter介绍 SimpleAdapter是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图. 构造函数 public SimpleAdapter (Context co ...

  9. storyboard三种sugue 和 跳转场景的三种方式 以及控制器之间的传值

    Storyboard引入了2个概念:1. scene:一个场景,由一个viewController和相关的xib表示. 2. segue:在这是用于连接scenes,其有多种类型,iphone包括:P ...

随机推荐

  1. javaWeb中的JDBC学习入门

    学习引荐地址:https://www.cnblogs.com/xdp-gacl/p/3946207.html 一.JDBC的相关概念介绍 1.1 数据库驱动 其实就好比我们平时使用到的独立声卡.网卡之 ...

  2. (Mark)JS中关于闭包

    闭包(Closures) 在ECMAScript中,函数是“第一类”对象.这个名词意味着函数可以作为参数被传递给其他函数使用 (在这种情况下,函数被称为“funargs”——“functional a ...

  3. HMAC的JAVA实现和应用

    1.简介: HMACSHA1 是从SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码). 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将 ...

  4. mysql错误 Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: YES)

    mysql -u root -p Aaa111222333 grant all privileges on *.* to root@'%' identified by 'aaa111222333; Q ...

  5. 原生js操作HTML DOM

    先上图 1.一些常用的方法 obj.getElementById() 返回带有指定 ID 的元素. obj.getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表( ...

  6. DEBUG : Eclipse Debug 时出现 Cannot connect to VM select failed错误

    Eclipse在执行Debug操作时, 出现“Eclipse Debug 时出现 "Cannot connect to VM select failed"”错误, 在网上查找该错误 ...

  7. docker是PaaS,与openstack是IaaS的关系

    个人理解Docker的每一个虚机其实是宿主操作系统中的一个进程.主要是一种虚拟化技术.OpenStack主要解决的是基础架构云的云服务问题.OpenStack是在虚拟化技术之上的一层,主要解决系统部署 ...

  8. SQLAlchemy会话与事务控制:互斥锁和共享锁

    关于sqlalchemy,可以细度这个网址:http://www.codexiu.cn/python/SQLAlchemy%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/73 ...

  9. xmodmap使用指南

    什么是 xmodmap 改变按键的行为 修改修饰键的行为 修改鼠标按键行为 Fvwm中的修辞键使用 1. 什么是 xmodmap xmodmap 是一个在 X 图形环境下用于修改键盘和鼠标按钮映射的工 ...

  10. http://www.ruanyifeng.com/blog/2013/07/gpg.html

    http://www.ruanyifeng.com/blog/2013/07/gpg.html