使用Loaders
来源:互联网 发布:python 拷贝文件 编辑:程序博客网 时间:2024/06/11 19:38
接下来会介绍一下如何来使用Loader异步加载数据,看看手机配置项发生改变时(eg:横竖屏切换)Activity是否为我们保存了Loader的状态,从而不用重新去加载数据。
下面是一个加载相册中所有相片的例子,为了兼容所有的Android版本,使用了兼容包中的FragmentActivity和LoaderCallbacks两个类。其实使用Loaders非常简单,LoaderManager提供了一种非常方便的Loader管理方式,通过赋予不同的Loader ID来区分不同的Loader,下面以系统提供的CursorLoader为例。只需要在onCreateLoader中创建相应的Loader,那么Loader如何来进行数据的加载我们就不用管了,只需在onLoaderFinish方法中处理加载过来的数据就行。
public class CustomGalleryView extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor>{private static final int LOADER_ID = 1;private Config config;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.layout_gallery_main);Intent clientIntent = getIntent();Log.i("INFO", "CustomGalleryView onCreate...");String windowTitle = clientIntent.getStringExtra(AppConstant.WINDOW_TITLE);if(!TextUtils.isEmpty(windowTitle)) setTitle(windowTitle);int defaultCheckResId = R.drawable.checkbox_up;int defaultCheckedResId = R.drawable.checkbox_selected;int checkboxCheckResId = clientIntent.getIntExtra(AppConstant.CHECKBOX_CHECK_RESOURCE, defaultCheckResId);int checkboxCheckedResId = clientIntent.getIntExtra(AppConstant.CHECKBOX_CHECKED_RESOURCE, defaultCheckedResId);String[] projection = { MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID };String sortOrder = MediaStore.Images.Media._ID;Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;config = new Config(checkboxCheckResId, checkboxCheckedResId, uri, projection, null, null, sortOrder);getSupportLoaderManager().initLoader(LOADER_ID, null, this);}@Overridepublic Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {Log.i("INFO", "Loader_id:"+arg0+" onCreateLoader");CursorLoader cursorLoader = new CursorLoader(this, config.getUri(), config.getProjection(), config.getSelection(), config.getSelectionArgs(), config.getSortOrder());return cursorLoader;}@Overridepublic void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {if(cursor != null){if(cursor.moveToFirst()){do {String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID));Log.i("INFO", path+":"+id);} while (cursor.moveToNext());}}}@Overridepublic void onLoaderReset(Loader<Cursor> arg0) {// TODO Auto-generated method stub}}
接下来我们来看一下Activity是否在手机配置项发生改变时保存了Loader的状态,避免了重复加载过程。下图是第一次应用启动时打印的结果,我们发现此时Loader进行了第一次的创建
再来看看横竖屏切换时打印的情况。我们可以发现此时Activity重新onCreate,而Loader并没有重新创建,也就是说Activity为我们保存好了Loader的状态,当发生配置项改变时不用重新去创建Loader,重新加载数据。做到及时的响应用户。
本小节主要介绍了如何来使用系提供的Loaders和Activity对Loader提供的一些非常友好的支持,下一小节将会来创建我们自己的Loader,也就是如何来自定义Loader。
0 0
- Loaders 使用
- 使用Loaders
- Loaders
- Loaders
- Loaders
- Loaders
- Loaders
- Loaders
- Loaders 的使用,结合Fragments
- Android关于Loaders的使用
- 使用Loaders异步加载数据
- 【安卓】如何使用Loaders
- Loaders 的使用,结合Fragments
- glide:动态使用 Model Loaders
- Loaders 的使用,结合Fragments
- Android4.0 Loaders使用方式解析
- Android Loaders(二)Loader的使用
- LoaderManager使用详解(三)---实现Loaders
- Hadoop科普文——常见的45个问题解答
- CSS 基础整理1
- JSTL核心标签库和EL表达式的联合使用
- JVM 垃圾回收算法
- 珠海:處在二次且全角落升值發展的城市
- 使用Loaders
- git 分支的创建与合并
- 营销策略:夸人不是拍马屁
- ACCESS 使用UNION 关联多个表或多个已有的查询
- ConcurrentHashMap原理分析
- cocos2d-x中的多点触摸的问题
- 计算机视觉的顶级国际会议
- 关于C 语言分母为0后的后果
- sed系列:行或者模式匹配删除特定行