登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 221140|回复: 13

android 1.6下使用Loader示例

[复制链接]

206

主题

1622

帖子

2720

安币

Android大神

Rank: 6Rank: 6

发表于 2011-11-10 13:55:19 | 显示全部楼层 |阅读模式

android 3.0 sdk,引入了很多新api,比如Loader。和Fragment类似(编写兼容android1.6的fragment),该api也可在android 1.6以上版本执行。

以下介绍如何编写Loader,实现对ListView的异步加载。效果如图:



示例中有一个后台线程每隔3秒更新数据库的长江记录,将记录改为“长江”或“Long River”。ListView无需监控数据库变化,基于Loader,会自动更新。实际上这里面是观察者模式,无非是系统自带了,只需调用即可,无需自己构造观察者。

这个示例也是完整的sqlite+content provider+cursor adapter+listview+loader组合示例。

编写前的准备类似编写兼容android1.6的fragment,需要导入jar包。

另外,2.3以前的Activity类没有提供一些Loader的帮助方法,需要让自己的Activity实现类继承FragmentActivity:

  1. public class ListViewActivity extends FragmentActivity
复制代码
本示例是在在视图显示中使用Theme基础上实现的。Activity类和RiverContentProvider类做了修改。Activity类:
  1. 本示例是在在视图显示中使用Theme基础上实现的。

  2. Activity类和RiverContentProvider类做了修改。

  3. Activity类:
复制代码
主要是增加了initLoader方法。这里主要是实现了LoaderCallbacks接口。其中:
  • onCreateLoader,在创建activity时跟着onCreate会调用一次
  • onLoadFinished,每次改变和Loader相关的数据库记录后会调用一次
  • onLoaderReset,在关闭Activity时调用,释放资源
然后,在Content provider中,要调用类似观察者模式中通知的方法,即,在update方法中通知观察者记录改变,在query方法中注册观察者,这样通知来了可接收并处理。update方法:
  1. @Override
  2. public int update(Uri uri, ContentValues values, String selection,
  3.         String[] selectionArgs) {
  4.     int returnValue = database.update("rivers", values, selection,
  5.             selectionArgs);
  6.    getContext().getContentResolver().notifyChange(uri, null);
  7.     return returnValue;
  8. }
复制代码
query方法:
  1. public Cursor query(Uri uri, String[] projection, String selection,
  2.         String[] selectionArgs, String sortOrder) {
  3.     Cursor cursor = database.query("rivers", projection, selection,
  4.             selectionArgs, null, null, sortOrder);
  5.    cursor.setNotificationUri(getContext().getContentResolver(), uri);
  6.     return cursor;
  7. }
复制代码
这里要注意,这个观察者模式是从sdk level 1就有的,也就是说,cursor可以接收通知来感知content provider数据变化,但是不能做到异步刷新界面。这次Loader机制通过官方支持实现了这个功能。另外,通过本示例也可观察到,当关闭Activity后,Content provider继续工作,它的后台线程还在不停的更新记录。源代码见:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

25

帖子

62

安币

程序猿

Rank: 2

发表于 2011-11-16 15:54:21 | 显示全部楼层
{:soso_e117:} 还没接触过这个控件,学习下..

2

主题

187

帖子

17

安币

初级码农

IT男

Rank: 1

QQ达人

QQ
发表于 2011-11-19 14:52:03 | 显示全部楼层
我学习之!
努力!!!

2

主题

187

帖子

17

安币

初级码农

IT男

Rank: 1

QQ达人

QQ
发表于 2011-11-19 15:34:22 | 显示全部楼层
能具体详细的讲一下?
努力!!!

0

主题

39

帖子

49

安币

初级码农

Rank: 1

QQ达人

发表于 2011-12-13 22:05:31 | 显示全部楼层
还没接触过这个控件,学习下..

0

主题

13

帖子

10

安币

初级码农

Rank: 1

发表于 2011-12-29 15:26:13 | 显示全部楼层
没有接触过这个

98

主题

1076

帖子

4130

安币

码皇(巴士元老)

Android奋斗者

Rank: 8Rank: 8

QQ达人

QQ
发表于 2012-7-9 20:54:03 | 显示全部楼层
学习下,不错不错
加油!!

33

主题

695

帖子

1179

安币

Android大神

Rank: 6Rank: 6

发表于 2012-8-3 21:12:17 | 显示全部楼层
辛苦楼主啦{:Caca:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表