Android 3.0引入了CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题。在API 11之前可以通过下载支持库,来使之前的系统支持此功能。
下面是一个例子:
公共类ListViewLoader ListActivity延伸 实现LoaderManager.LoaderCallbacks{//这是适配器被用来显示列表的数据 SimpleCursorAdapter mAdapter;//这是我们将检索联系人行 静态final String[]投影=new String [] {ContactsContract.Data._ID, ContactsContract.Data.DISPLAY_NAME};//这是一个选择的标准 静态字符串最后选择=" (" + ContactsContract.Data。DISPLAY_NAME +“NOTNULL)和(“+ ContactsContract.Data。DISPLAY_NAME + " !="))”; @Override 保护无效onCreate(包savedInstanceState) { super.onCreate (savedInstanceState);//创建一个进度条来显示在列表加载 ProgressBar ProgressBar=new ProgressBar(这个); progressBar。setLayoutParams(新LayoutParams (LayoutParams.WRAP_CONTENT LayoutParams。WRAP_CONTENT Gravity.CENTER)); progressBar.setIndeterminate(真正的); getListView () .setEmptyView (progressBar);//必须添加进度条到根的布局 ViewGroup根=(ViewGroup) findViewById (android.R.id.content); root.addView (progressBar);//光标适配器,指定哪些列进入这观点 String [] fromColumns={ContactsContract.Data.DISPLAY_NAME}; int[]要查看={android.R.id.text1};//simple_list_item_1 TextView//创建一个空的适配器我们将使用显示加载数据。//我们传递null指针,然后更新它在onLoadFinished () mAdapter=new SimpleCursorAdapter(这一点, android.R.layout。simple_list_item_1、零 fromColumns要查看0); setListAdapter (mAdapter);//加载程序做准备。经常和一个现有的,//或开始一个新的。 getLoaderManager ()。initLoader (0, null,这); }//时调用一个新的加载程序需要创建 公共Loader onCreateLoader (int id、包args) {//现在创建并返回一个CursorLoader照顾//创建一个数据显示光标。 返回新CursorLoader (ContactsContract.Data.CONTENT_URI,这 投影、选择、空、空); }//之前创建的装载机已完成加载时调用 公共空间onLoadFinished (Loader 装载机,游标数据){//交换的新游标。(框架将负责关闭//旧游标一旦我们回报。) mAdapter.swapCursor(数据); }//时调用重置以前创建的装载机,使数据不可用 公共空间onLoaderReset (Loader 装载机){//这叫做当最后一个光标提供onLoadFinished ()//以上即将关闭。我们需要确保我们没有//再使用它。 mAdapter.swapCursor(空); } @Override 公共空间onListItemClick (ListView l,视图v, int位置,长id) {//点击列表项时做些什么 } } >之前 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
使用CursorLoader异步加载数据