高级控件AdapterView(二):通过Observer实现数据、视图同步刷新

博客详细介绍了Android中AdapterView如何通过Observer模式实现实时数据与视图同步刷新。讲解了观察者模式的概念,分析了DataSetObserver和Observable的角色,以及在AdapterView和Adapter中的具体应用。最后,提供了一个简单的Demo,展示了长按删除ListView项的操作。
摘要由CSDN通过智能技术生成

    多条目控件AdapterView是仿MVC设计模式进行设计的,即AdapterView与数据是分离的,AdapterView并不直接操作数据,而是利用中间件适配器Adapter,实际上,完整的AdapterView显示是三个逻辑部分:AdapterView+Adapter+Data,Adapter相当于MVC中的控制器C,AdapterView相当于MVC中的视图V,顺便说一句,Android程序设计,也是利用MVC控制模式。既然视图与数据是分离的,那么当数据有更新时,视图显然无法自动更新,Adapter必须实时监控数据变化并刷新视图,这里用到的是Observer(观察者模式)。


一、什么是观察者模式

    所谓观察者模式,听起来很复杂高大上,实际上响应过程就如同一个点击事件处理过程(实际上也是按照观察者模式处理,但形式上有所改变),比如一个Button和一个监听器,Button就是被观察者(T extends Observable),监听器就是观察者(T extends DataSetObservable),当Button状态发生变化时,被观察者“贱贱”的向观察者发出通知,告知其状态改变,然后观察者做出相应的处理。观察者模式比较容易混淆的就是这个“贱贱”,并不是观察者主动观察得知被观察者发生变化,而是被动的等待再作相应的处理。

    为实现观察者模式,Android设计两个抽象类,分别是DataSetObserver及Observable(可观察的,即被观察者),从英文字面上就直观看出谁是观察者,谁是被观察者。下面对此详细介绍。


二、DataSetObserver(观察者)抽象类与Observable(被观察者)抽象类继承体系

1、DataSetObserver

DataSetObserver类的API这样描述:DataSetObserver(观察者)通常设置给Cursor或Adapter,如果数据发生变化则回调该类方法。DataSetObserver类无法单独调用,必须配合DataSetObservable类使用。该类的实例即是Observer,观察者的刷新视图行为是由onChanged以及onInvalidated方法决定的,通常在AdapterView控件,如ListView中继承该类,并通过重写这两个方法,实现针对性的视图刷新。


public abstract class DataSetObserver {
    //当被观察的数据发生变化,回调该函数
    public void onChanged()
    //当被观察的数据失效,回调该函数
    public void onInvalidated()


<span style="font-family: FangSong_GB2312; font-weight: bold; background-color: rgb(255, 255, 255);">2、Observable(被观察者)抽象类继承体系</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值