• 几种适配器&观察者&ListView之间的那点事


    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就得到了更新。
  • 相关阅读:
    saltstack安装和配置
    puppet安装和配置
    mongodb使用
    mongdb安装
    redis数据类型
    redis安装
    memcached结合php以及memcache共享session
    yum安装的Apache的各种配置文件的位置
    memcached 基本操作
    memcached基本操作和语法
  • 原文地址:https://www.cnblogs.com/LuLei1990/p/5267136.html
Copyright © 2020-2023  润新知