CursorAdapter刷新机制

Android 数据存储之使用 CursorLoader 加载数据 CursorAdapter 简介 Adapter:Responsible for making a list item view for each item in data source. 正如上面所说,适配器为数据源中的每个项创建列表项视图。例如,如果我们的数据源为 ArrayList 比如由文字组成的 ArrayList,那么我们就需要使用 ArrayAdapter 来填充列表。... 阅读详情


今天看downloadmanager源码发现 cursorAdapter 会在数据变化的情况下没有调用notifydatasetxx() 而是自动刷新。和其他adapeter刷新方式不一样。


看了一下源码,发现cursoradapter内部有自动的刷新代码。如下:

    void init(Context context, Cursor c, int flags) {
        if ((flags & FLAG_AUTO_REQUERY) == FLAG_AUTO_REQUERY) {
            flags |= FLAG_REGISTER_CONTENT_OBSERVER;
            mAutoRequery = true;
        } else {
            mAutoRequery = false;
        }
        boolean cursorPresent = c != null;
        mCursor = c;
        mDataValid = cursorPresent;
        mContext = context;
        mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1;
        if ((flags & FLAG_REGISTER_CONTENT_OBSERVER) == FLAG_REGISTER_CONTENT_OBSERVER) {
            mChangeObserver = new ChangeObserver();
            mDataSetObserver = new MyDataSetObserver();
        } else {
            mChangeObserver = null;
            mDataSetObserver = null;
        }

        if (cursorPresent) {
            if (mChangeObserver != null) c.registerContentObserver(mChangeObserver);
            if (mDataSetObserver != null) c.registerDataSetObserver(mDataSetObserver);
        }
    }



observer代码中会进行数据更新,如下:

    private class MyDataSetObserver extends DataSetObserver {
        @Override
        public void onChanged() {
            mDataValid = true;
            notifyDataSetChanged();
        }

        @Override
        public void onInvalidated() {
            mDataValid = false;
            notifyDataSetInvalidated();
        }
    }




Android开发之ListView控件实战详解 ListView是 Android 平台中最经典的控件之一,主要用于展示可垂直滚动的列表数据。它继承自,通过与Adapter配合,实现数据与视图的动态绑定。其核心特性包括:特性描述可滚动支持大量数据展示,自动提供滚动功能适配机制依赖 Adapter 实现数据与视图的解耦项复用通过复用减少内存消耗// 在布局文件中定义ListView<ListView。 阅读详情

相关推荐

FPGA远程更新实战:Multiboot双镜像配置与Flash分区策略

本文详细介绍了FPGA远程更新中Multiboot双镜像的配置与实现,重点对比了XDC约束和ICAPE2原语两种配置方案的优缺点及适用场景。提供了基于W25Q128 Flash的非对称分区策略、MCS文件生成与烧写方法,并深入探讨了远程更新的流程容错处理与可靠性优化建议,帮助开发者构建稳定可靠的FPGA远程更新系统。

ss78901的博客 832

Android Adapter 源码笔记(3)

SimpleAdapter extends BaseAdapter implements Filterable本质上和ArrayAdapter一样,只不过Data的数据结构更为复杂,支持的View layout也更为复杂.为了支持携带多元化类型的数据,mData在这里的数据结构变为了List<? extends Map<String, ?>>,每份Item都有一个Map<String, ?>对应,

fyfcauc的专栏 584

MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出

MS2107 是一款视频和音频采集芯片,支持CVBS转USB2.0 ;可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。

TEL18967112838的博客 2075

[小坑]调用CursorAdapter中的notifyDataSetChanged后,对应绑定的ListView没有自动刷新

最近在调试contentprovider时想要将查询得到的cursor同activity中的ListView关联起来,实现contentprovider内容变化时自动触发也面更新,网上随便查了个方法,具体为:在ContentResolver上注册个observer,这样对应的contentprovider内容发生变化时,会调用observer的onChange方法,onChange中调用Curso...

weixin_40081755的博客 798

电子设计实战:用MOS管手把手搭建D触发器电路(含时序分析避坑指南)

本文详细介绍了如何使用MOS管从零开始搭建D触发器电路,重点解析了建立时间和保持时间等关键时序参数对电路稳定性的影响。通过实测波形分析和避坑指南,帮助电子工程师掌握D触发器的实际搭建技巧与优化方法,提升数字电路设计的可靠性。

x1y2z的博客 1159

基于CANopenNode协议栈在正点原子探索者开发板上进行移植

配置好之后进行采用keil IDE进行代码生成即可,还需要进行CANopenNode的代码集成,并参照demo进行代码移植。发送完成后心跳包以1s的周期重新开始发送。正点原子的开发板引出的是CAN1接口。这里的心跳时间间隔设置为100ms。则将心跳包周期设置为0。

wangfandashe的博客 4694

android 自定义simplecursoradapter,数据库更改时,Android SimpleCursorAdapter不会更新

数据库更改时,Android SimpleCursorAdapter不会更新我有一个Android notifydatasetchanged(),该数据库由Cursor通过SimpleCursorAdapter支持。单击项目后,将切换数据库中相应行中的标志字段,并且需要更新列表中的视图。问题是,当更新后的视图退出屏幕并被回收时,旧值返回视图时会显示在视图上。 每当thr列表重新绘制(方向更改等)时...

weixin_42517486的博客 379

IEEE Access 上岸指南,附含泪整理的 cover letter 、沟通邮件、终版文档等资料包

终于上岸了! 我是一个小硕,本科期间发表过两篇水文,奈何学校有更高的毕业要求,只能硬着头皮尝试一下 SCI。 想投 IEEE Access 的朋友都应该知道 小木虫论坛 对这个期刊的讨论,褒贬不一,有的人说是大水刊,有的人说有难度。 比如: @wow_: 不可否认,灌水期刊。只要之前中过一篇,再投基本没有不录用的!我们实验室其他老师说过一区除外的收费期刊都应该禁止灌水。 @pssp: 审稿人还...

kurryluo的博客 1万+

CursorAdapter如何监听数据变化通知界面刷新

ContentObserver 监听数据库变化 DataSetObserver 监听cursor close/deactivate/requery

wuhengde的专栏 1227

用STM32F103C8T6和TB6612驱动模块,从零搭建一辆能避障循迹的智能小车(附完整代码)

本文详细介绍了如何使用STM32F103C8T6和TB6612驱动模块从零搭建一辆能避障循迹的智能小车。内容涵盖硬件选型、电路设计、底层驱动配置以及智能行为算法实现,并附有完整代码示例,帮助开发者快速掌握嵌入式开发的核心技术。

weixin_42641741的博客 444

史上最牛逼的导航网站(很全很详细)

今天,给大家推荐47个聚合型的导航网站 每一个都收录上百个网站,1个能顶100个,丝毫没有夸张的成分。 (推荐收藏) 设计师导航网站 01 优设导航 https://hao.uisdc.com/ 设计师必备的导航网站,包含设计工具、素材资源、字体设计、配色方案、酷站模板等。 界面清晰无广告,收录网站超过520个。 02 设计导航 http://h...

孙叫兽的博客 7万+

Cursor和CursorAdapter中的观察者模式机制

Cursor,CursorAdapter配合ListView一起使用,当数据发生改变的时候,可以实现列表数据自动刷新。现在介绍一下内中原理。 我们在使用Cursor,CursorAdapter搭配ListView进行上层业务开发的过程中,我们只要合理的利用android提供的框架。我们可以在数据插入数据库之后,自动进行页面的刷新。

hailushijie的专栏 7139

uniapp H5刷新页面后返回按钮失效问题完美解决方案

这个问题其实很隐蔽,尤其是uniapp H5 场景下刷新导致栈清理,很多开发者一开始都懵掉了。uniapp 内部对「页面栈只有一个」时的返回逻辑是reLaunch;所以只要在这个分支里替换为自己的逻辑(比如),就能顺利实现预期。目前我在项目里已经跑通了,暂时没发现问题。不得不说,知道源码里这个逻辑后,真的是醍醐灌顶,只能膜拜框架大佬了 🤯。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 523

AdapterView与Adapter(三) --Cursor及CursorAdapter数据变化监听

第一弹 本文部分参考 http://www.cnblogs.com/ufocdy/archive/2011/03/17/1987327.html  主要是以简单的语言说明cursor和cursorAdapter的监听机制 先来讲讲cursor的监听机制, 给cursor加监听很简单,调用cursor.registerContentOberserver()即可,然后重写onChange()方

09的专栏 2593

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 为什么当数据库改变时,与CursorAdapter关联的页面始终不更新

在android 开发过程中,也许有人会经常遇到这样的问题:CursorAdapter与一个list页面绑定,所有的代码都正确,CursorAdapter 与 Cursor也正常关联,但当数据库改变时list页面就是不更新!下面我们来看看源代码: CursorAdapter.java void init(Context context, Cursor c, boolean autoRequer

我的专栏 3165

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

AsyncQueryHandler、CursorAdapter和ContentProvider的使用

一、AsyncQueryHandler的使用 该类是谷歌封装的异步查询的Handler,这个类是抽象类但是其并没有抽象方法。具体使用方法如下所示: package com.study.yang.contentproviderclientdemo.handler import android.content.AsyncQueryHandler import android.content.Cont...

Duckdan的博客 311

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

UI问题集合

1. android 5.0 及以上 setColorFilter(null) clear colorfilter 无效,造成tab中颜色无法修改      5.0以下正常。模拟器测试。。 真机还木有5.0 2. 使用cursor及cursoradapter 动态刷新数据 流程本博的cursor notify机制。 但是还有问题待解决,因为使用到了多数据库文件切换技...

acck42440的博客 148

Android中CursorLoader的使用、原理及注意事项

前言 最近在项目中涉及到了即时聊天,因此不可避免地要用到实时刷新的功能,因为在以前的项目中见到别人使用CursorLoader+CursorAdapter+ContentProvider的机制来实现实时刷新,于是没有多研究就直接照搬了这个机制,直到后来出现了发送消息后不能更新到界面上的问题,查了很久也查不出原因,于是就想从这个机制本身出发,看看有可能是在哪个环节出了问题。 使用 1.让Act...

weixin_30832983的博客 197

ContentObserver与DatasetObserver区别

    1. ContentObserver     ContentObserver主要是通过Uri来监测特定的Databases的表,如果该Databases表有变动则会通知更新cursor中的数据。     如果使用ContentProvider操作数据库,在ContentProvider的query()方法中会通过Cursor.setNotificationUri()注册uri描...

weixin_34378969的博客 118

Android开发——利用Cursor+CursorAdapter实现界面实时更新

Android开发——利用Cursor+CursorAdapter实现界面实时更新 好久没有更新博客了。不是没时间写,而是太懒。而且感觉有些东西没有时间总结,之之后再想写,就想不起来了。晚上新发现一点东西,所以就及时写下来。 最近利用业余时间在看Android的Download模块,看得是2.3之前版本的源码,2.3之后android就开放了一个下载管理器,并提供了一些api。

Aaronzzq的专栏 584

Contentprovider,CursorAdapter更新数据后自动刷新ListView

1.在Contentprovider的query方法中加入一个通知uri 查询完数据库后得到一个cursor,cursor.setNotificaionUri(contentResolver, uri); 2.在insert,delete,update方法中通知改变 contentResolver.notifyChange(uri, null);

LengXAC的专栏 2162

AndroidRecyclerViewDemo与LoaderManager结合:实现数据动态加载的终极指南

在Android开发中,RecyclerView已成为构建高效列表界面的标准组件,而LoaderManager则是处理异步数据加载的利器。本文将深入探讨如何将两者完美结合,实现数据动态加载的最佳实践。AndroidRecyclerViewDemo项目展示了这一强大组合的实际应用,为开发者提供了完整的参考实现。 ## 为什么需要RecyclerView与LoaderManager的完美组合? R

gitblog_00036的博客 1081

android 适配器Adpter的使用总结 之 CursorAdpter

转载请标明出处:http://www.cnblogs.com/tanlon/archive/2011/06/20/2085562.html 通过前面两篇文章: Android 适配器Adapter的学习:http://www.cnblogs.com/tanlon/archive/2011/05/21/2053009.html Android 适配器Adpter的使用总结:http://www...

weixin_34009794的博客 121
上一篇: 访问者模式
下一篇: 手机序列号和IMEI号的区别
javalive09
博客等级 码龄16年 43粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值