概念:用于对数据进行异步加载
一,使用方法:
①Activity或Fragment
②一个LoaderManager实例,用于管理Loader
③使用CursorLoader,用于查询ContentProvider的数据
④实现LoaderMnager.LoaderCallBacks<D>,它可以初始化一个Loader或者管理Loader
⑤要想显示Loader的数据,可以使用SimpleCursorAdapter并使用观察者模式
⑥当使用CursorLoader时,数据源会是一个ContentProvider
2、启动Loader
①LoaderManager管理Activity或fragment中的一个或多个Loader
②通常在Activity的onCreate()方法中对LoaderManager进行初始化
③保证一个Loader被初始化并激活,它具有两种可能的结果
a.如果初始化的Loader ID已存在,将重用原来的Loader
b.如果初始化的Loader ID不存在,将使用LoaderMnager.LoaderCallBacks中的onCreateLoader()实例化一个Loader对象,它是创建Loader对象的发源地
3、重启Loader
①当有新数据更新时,需要使用restartLoader()方法对该Loader进行重启
②使用方法: getLoaderManager().restartLoader(0, null, this)
二,LoaderManager
获取LoaderManager对象: Activity.getLoaderMaanager()
initLoader(int id, Bundle args, LoaderCallbacks<D> callback): 初始化和启动一个Loader
restartLoader(int id, Bundle args, LoaderCallbacks<D> callback): 通过loader id重新启动一个Loader
destroyLoader(int id): 注销一个Loader
LoaderMnager.LoaderCallBacks<D>
①Loader<D> onCreateLoader(int id,Bundle args)
在onCreateLoader()方法中,通过CursorLoader查询ContentProvider的数据
②void onLoadFinished(Loader<D> loader,D data)
在onLoadFinished()方法中,通过adapter.swapCursor()将加载完的数据显示到ListView
③void onLoaderReset(Loader<D> loader)
在onLoaderReset()方法中,通过adapter.swapCursor(null)清空无效的数据
三, CursorLoader
父类: AsyncTaskLoader ->Loader
CursorLoader(Context, Uri, String[], String, String[], String)
四, AsyncTaskLoader<D>
概念: 抽像的Loader子类,并提供AsyncTask类来工作,用于加载大数据
主要方法
onStartLoading() 开始启动Loader方法
D loadInBackground() 后台加载数据的处理方法
deliverResult(D result) 发布数据的处理方法
onContentChanged() 数据内容改变时的处理方法
无需重写
使用方法:同CursorLoader
五,SearchView
概念:文本搜索控件,可用于ActionBar
常用属性
android:inputType="text" 设置输入内容的类型,同EditText的inputType属性
android:iconifiedByDefault="true" 是否图标化,true为图标化,在点击图标时才显示文本输入框
android:queryHint 设置提示文本信息
设置查询文本事件监听器:setOnQueryTextListener(SearchView.OnQueryTextListener)
onQueryTextChange(String newText) 查询内容发生改变时
onQueryTextSubmit(String query) 按“Enter“键提交查询内容