工作要求向数据库中插入数据,同时显示到UI上,我们找到了CursorLoader。这个工具很强大,大大简化了代码的复杂度。android 3.0提供了Loader机制。这里是他们的继承关系,比较可以得到清晰明确的框架关系。
java.lang.Object | |||
↳ | android.content.Loader<D> | ||
↳ | android.content.AsyncTaskLoader<D> | ||
↳ | android.content.CursorLoader |
对于CursorLoader,利用好google提供的接口LoaderManager以及为其注册事件的接口LoaderManager.LoaderCallbacks<Cursor>就可以实现我们需要的功能。
public interface LoaderCallbacks<D> { public Loader<D> onCreateLoader(int id, Bundle args); public void onLoadFinished(Loader<D> loader, D data); public void onLoaderReset(Loader<D> loader); }方法onCreateLoader是创建Loader时候调用,是为了提供查询的配置。会在loader初始化也就是注册这个接口的时候调用。此时紧接着会调用getSupportLoaderManager().initLoader(0, null, this); 然后到加载完毕时调用方法OnLoadFinished,将数据传递到Adapter进行显示。
方法onLoaderReset是在我们的配置发生变化的,使用restartLoader(int , Bundle ,LoaderManager.LoaderCallbacks<D>)方法重新初始化loader之后调用,一般是用来释放对前面loader查询到的结果引用。
Loader和CursorLoader的关系:
Loader是核心,其已经实现了基本功能;
AsyncTaskLoader继承自Loader,主要任务就是将耗时操作从主线程中剥离出来;
CursorLoader继承自AsyncTaskLoader,是泛型类的一个具体类,也是我们最常用Loader。
结构图解:
下面附上实现的代码工程:http://download.csdn.net/detail/u013614207/7471125