Android开发——利用Cursor+CursorAdapter实现界面实时更新
好久没有更新博客了。不是没时间写,而是太懒。而且感觉有些东西没有时间总结,之之后再想写,就想不起来了。晚上新发现一点东西,所以就及时写下来。
最近利用业余时间在看Android的Download模块,看得是2.3之前版本的源码,2.3之后android就开放了一个下载管理器,并提供了一些api。不过想对下载模块有更深入的了解还是必须自己花点时间看看downloadprovider的源码。相信会收获很多。如果有时间想写写文章对downloadprovider进行分析。
这篇文章不是分析download的,不过却是我从读download的源码发现的。
情景分析:
我们有一个Service,这个Service在后台会不断的更新多条数据,我们又想将不断更新的数据展现在ui上面这时你是怎么解决的呢?其实就是类似有些浏览器的下载管理器界面,有没有想过是怎么实现的??
解决方案:
1,使用通知,只能在通知栏看到更新,加入用户想在一个activity中有个进度显示呢?
2,发送更新广播,当是在一个listView中的多个列需要更新广播就有点吃力了;
还有吗?
参考方案:
利用Provider将数据持久化,再用Cursor监听Provider的变化来更新数据。当然这需要中Service update数据。
-----部分代码-------
//一个观察者
privateclassMyContentObserverextendsContentObserver {
publicMyContentObserver() {
super(newHandler());
}
@Override
publicvoidonChange(booleanselfChange) {
super.onChange(selfChange);
Log.i("DLA","MyContentObserver onChange!");
//处理数据更新回调
refreshData();
}
}
privatevoidrefreshData() {
if(mCursor.isClosed()) {
return;
}
//更新
mCursor.requery();
}
//一个实现CursorAdapter的适配器
privateMyAdaptermAdapter;
privateCursormCursor;
privateMyContentObservermObserver;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
setupViews();
mCursor= getContentResolver().query(MyProvider.CONTENT_URI,sAppReadableColumnsArray,
null,null,null);
mObserver=newMyContentObserver();
//注册观察者
mCursor.registerContentObserver(mObserver);
mAdapter=newMyAdapter(this, R.layout.list_item,mCursor);
setListAdapter(mAdapter);
}
@Override
protectedvoidonDestroy() {
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
更多相关文章
- 一句话锁定MySQL数据占用元凶
- Android数据与界面绑定工具简述
- KCommon-使用Kotlin编写,基于MVP的极速开发框架
- 【Android企业级开发案例分享】仿西瓜视频主页面框架,自定义GridL
- Android(安卓)中 ListView 分页加载数据
- 在android下出现乱码的问题(在网络中传输和获取数据时)
- Android(安卓)11正式发布:小米、OPPO等手机将陆续更新
- ANDROID 中UID与PID的作用与区别
- Android通讯录开发之解决快速搜索联系人线程同步问题