好久没有更新博客了。不是没时间写,而是太懒。而且感觉有些东西没有时间总结,之之后再想写,就想不起来了。晚上新发现一点东西,所以就及时写下来。
最近利用业余时间在看Android的Download模块,看得是2.3之前版本的源码,2.3之后android就开放了一个下载管理器,并提供了一些api。不过想对下载模块有更深入的了解还是必须自己花点时间看看downloadprovider的源码。相信会收获很多。如果有时间想写写文章对downloadprovider进行分析。
这篇文章不是分析download的,不过却是我从读download的源码发现的。
情景分析:
我们有一个Service,这个Service在后台会不断的更新多条数据,我们又想将不断更新的数据展现在ui上面这时你是怎么解决的呢?其实就是类似有些浏览器的下载管理器界面,有没有想过是怎么实现的??
解决方案:
1,使用通知,只能在通知栏看到更新,加入用户想在一个activity中有个进度显示呢?
2,发送更新广播,当是在一个listView中的多个列需要更新广播就有点吃力了;
还有吗?
参考方案:
利用Provider将数据持久化,再用Cursor监听Provider的变化来更新数据。当然这需要中Service update数据。
-----部分代码-------
//一个观察者
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("DLA", "MyContentObserver onChange!");
//处理数据更新回调
refreshData();
}
}
private void refreshData() {
if (mCursor.isClosed()) {
return;
}
//更新
mCursor.requery();
}
//一个实现CursorAdapter的适配器
private MyAdapter mAdapter;
private Cursor mCursor;
private MyContentObserver mObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
setupViews();
mCursor = getContentResolver().query(MyProvider.CONTENT_URI, sAppReadableColumnsArray,
null, null, null);
mObserver = new MyContentObserver();
//注册观察者
mCursor.registerContentObserver(mObserver);
mAdapter = new MyAdapter(this, R.layout.list_item, mCursor);
setListAdapter(mAdapter);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mCursor != null) {
mCursor.unregisterContentObserver(mObserver);
mCursor.close();
}
}
⋯⋯
⋯⋯
这样实现后当MyProvider.CONTENT_URI对应的数据发生变化时都会调用观察者的onChange方法,mCursor.requery()执行后listview就直接更新了。(不知道在其他类型的Adapter中是否自动更新,而不需要调用adapter的notifyDataSetChanged)
--------end--------
感谢:http://www.cnblogs.com/halzhang/archive/2011/07/16/2108470.html
分享到:
相关推荐
内容概要: ...能学到什么:ContentProvider、ContentResolver、CursorAdapter、Cursor、后台服务、前台服务、绑定服务、自定义广播、播放进度条、OnClickListener监听器 适用人群:Android开发初学者
androidx-cursoradapter-1.0.0.aar
安卓开发-继承CursorAdapter实现自己的功能。这里就是往sqlite数据库插入数据,然后提取出数据并展示到listview中。这里仅仅是为了学习的目的。其实这里完全可以使用SimpleCursorAdapter来做。
###使用了ContentProvider+LoaderManager+CursorAdapter,为ListView提供数据 ###为什么要这样做 传统的ListVIew更新数据操作麻烦,且在不同的线程中会产生问题 使用ContentProvider可以简化、结构化数据操作 通过...
android demo,listview,cursorAdapter的使用,
使用CursorAdapter写了一个小的应用
a simple demo about the use of CursorAdapter on Android
CursorAdapter和ListView结合使用,相关博文:http://www.cnblogs.com/tianzhijiexian/p/4019645.html
CursorAdapter的用法 简单的CursorAdapter的用法 简单入门
VFP 通过CursorAdapter 连接access的各种方式
UI 设计与实现:整体界面设计应该简洁明了、美观大方,考虑到 Android 手机屏幕大小和分辨率的限制,需要合理布局组件和调整界面比例。 测试和优化:对整个应用进行测试,检测是否存在 bug 和性能瓶颈,并进行优化...
我从网络下载的有关 CursorAdapter(CA)相关资料,其中有: 介绍CursorAdapter类 CursorAdapter 起步 国外FoxPro MVP的CursorAdapter示例 VFP9对CursorAdapter的改进 vfp9CA的新方法 CursorAdapter类的制作和应用1-2...
1.Android调用系统通讯录 2.选择联系人 3.拨打电话 4.添加 查询联系人
NULL 博文链接:https://zymic.iteye.com/blog/743538
|--利用FinalHttp实现多线程断点续传 |--加密之MD5 |--动画Animation详解 |--动画之view左右抖动 |--动画之移动动画 |--动画之组合动画 |--动画之缩放动画ScaleAnimation |--反序列化对象 |--发送短信 读天气 调音量...
到处可以看到VFP专家Doug Hennig的大作--CursorAdapter起步,但很难看到其中说到的附件(SFDataClasses.vcx),经常看到有人要这个类,但找不到。这个是我花了些精力和时间弄到的,有需要的Foxer,可以看看。
NULL 博文链接:https://zhuqiang5138.iteye.com/blog/1356403
支持RecyclerView的CursorAdapter,包装了RecyclerView.Adapter的notifyDataSetChanged()相关系列方法。当数据发生改变的时候,只需要调用swapCursorItemChanged()等方法就行了。
本文实例讲述了Android编程实现输入框动态自动提示功能。分享给大家供大家参考,具体如下: 关于AutoCompleteTextView的使用,我想大家并不陌生,对其设定上Adapter后系统便能自己识别与匹配了。近期 一个项目中,...
android-simple-listview-app 简单的Android ListView用法(CursorAdapter)示例