Android官方开发文档Training系列课程中文版:后台加载数据之处理CursorLoader的查询结果
来源:互联网 发布:手机淘宝修改发货地址 编辑:程序博客网 时间:2024/06/06 05:49
原文地址:http://android.xsoftlab.net/training/load-data-background/handle-results.html
就像上节课所说的,我们应该在onCreateLoader()内使用CursorLoader来加载数据。那么在数据加载完毕之后,加载结果会通过LoaderCallbacks.onLoadFinished()方法传回到实现类中。该方法的其中一个参数为包含查询结果的Cursor对象。你可以通过这个对象来更新UI数据或者用它来做进一步的操作。
除了onCreateLoader()及onLoadFinished()这两个方法之外,还应当实现onLoaderReset()方法。这个方法会在上面返回的Cursor对象所关联的数据发生变化时调用。如果数据发生了变化,那么Android框架会重新进行查询。
处理查询结果
为了显示Cursor对象中的数据,这里需要实现AdapterView的相关方法以及CursorAdapter的相关方法。系统会自动的将Cursor中的数据转换到View上。
你可以在展示数据之前将数据与Adapter对象进行关联,这样的话系统才会自动的更新View:
public String[] mFromColumns = { DataProviderContract.IMAGE_PICTURENAME_COLUMN};public int[] mToFields = { R.id.PictureName};// Gets a handle to a List ViewListView mListView = (ListView) findViewById(R.id.dataList);/* * Defines a SimpleCursorAdapter for the ListView * */SimpleCursorAdapter mAdapter = new SimpleCursorAdapter( this, // Current context R.layout.list_item, // Layout for a single row null, // No Cursor yet mFromColumns, // Cursor columns to use mToFields, // Layout fields to use 0 // No flags );// Sets the adapter for the viewmListView.setAdapter(mAdapter);.../* * Defines the callback that CursorLoader calls * when it's finished its query */@Overridepublic void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { ... /* * Moves the query results into the adapter, causing the * ListView fronting this adapter to re-display */ mAdapter.changeCursor(cursor);}
移除旧的Cursor引用
CursorLoader会在Cursor处于无效状态时对其进行重置。这种事件会经常发生,因为Cursor所关联的数据会经常发生变化。在重新查询之前,系统会调用所实现的onLoaderReset()方法。在该方法内,应将当前Cursor的所持有的引用置空,以防止内存泄露。一旦onLoaderReset()方法执行完毕,CursorLoader就会重新进行查询。
/* * Invoked when the CursorLoader is being reset. For example, this is * called if the data in the provider changes and the Cursor becomes stale. */@Overridepublic void onLoaderReset(Loader<Cursor> loader) { /* * Clears out the adapter's reference to the Cursor. * This prevents memory leaks. */ mAdapter.changeCursor(null);}
0 0
- Android官方开发文档Training系列课程中文版:后台加载数据之处理CursorLoader的查询结果
- Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询
- Android官方开发文档Training系列课程中文版:后台服务之响应IntentService的处理结果
- Android官方开发文档Training系列课程中文版:后台服务之IntentService的创建
- Android官方开发文档Training系列课程中文版:后台服务之IntentService的使用
- Android官方开发文档Training系列课程中文版:手势处理之记录手指移动的轨迹
- Android官方开发文档Training系列课程中文版:手势处理之ViewGroup的事件管理
- Android官方开发文档Training系列课程中文版:键盘输入处理之指定输入的类型
- Android官方开发文档Training系列课程中文版:键盘输入处理之控制输入法的显示方式
- Android官方开发文档Training系列课程中文版:键盘输入处理之处理键盘按键
- Android官方开发文档Training系列课程中文版:高效显示位图之加载大位图
- Android官方开发文档Training系列课程中文版:布局性能优化之按需加载View
- Android官方开发文档Training系列课程中文版:手势处理之监测通用手势
- Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller
- Android官方开发文档Training系列课程中文版:手势处理之拖拽或缩放
- Android官方开发文档Training系列课程中文版:数据存储之键值对序列存储
- Android官方开发文档Training系列课程中文版:数据存储之文件存储
- Android官方开发文档Training系列课程中文版:数据存储之数据库存储
- 锁定关键系统文件,防止提权篡改
- 网络爬虫中Json数据的解析[以时光网为例]
- 面向对象_一个标准的手机的代码及测试
- 荣耀6调试时不打印Logcat错误日志
- Java mkdir()与mkdirs()的区别
- Android官方开发文档Training系列课程中文版:后台加载数据之处理CursorLoader的查询结果
- Mybatis绑定错误的原因
- Thinking in java - 注解(1)
- 第零章,为什么学习Linux以及关于Linux安装中遇到的难点
- Unity插件 - MeshEditor(六) 变形动画状态机
- 23种设计模式 第二部分 结构模式(5) 桥接模式
- Compare Version Numbers
- Ajax的使用
- lua自定义迭代器