使用CursorLoader异步加载数据
Android3.0引入了CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题。在API11之前可以通过下载支持库,来使之前的系统支持此功能。
下面是一个例子:
publicclassListViewLoaderextendsListActivity implementsLoaderManager.LoaderCallbacks{ //ThisistheAdapterbeingusedtodisplaythelist'sdata SimpleCursorAdaptermAdapter; //ThesearetheContactsrowsthatwewillretrieve staticfinalString[]PROJECTION=newString[]{ContactsContract.Data._ID, ContactsContract.Data.DISPLAY_NAME}; //Thisistheselectcriteria staticfinalStringSELECTION="(("+ ContactsContract.Data.DISPLAY_NAME+"NOTNULL)AND("+ ContactsContract.Data.DISPLAY_NAME+"!=''))"; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //Createaprogressbartodisplaywhilethelistloads ProgressBarprogressBar=newProgressBar(this); progressBar.setLayoutParams(newLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,Gravity.CENTER)); progressBar.setIndeterminate(true); getListView().setEmptyView(progressBar); //Mustaddtheprogressbartotherootofthelayout ViewGrouproot=(ViewGroup)findViewById(android.R.id.content); root.addView(progressBar); //Forthecursoradapter,specifywhichcolumnsgointowhichviews String[]fromColumns={ContactsContract.Data.DISPLAY_NAME}; int[]toViews={android.R.id.text1};//TheTextViewinsimple_list_item_1 //Createanemptyadapterwewillusetodisplaytheloadeddata. //Wepassnullforthecursor,thenupdateitinonLoadFinished() mAdapter=newSimpleCursorAdapter(this, android.R.layout.simple_list_item_1,null, fromColumns,toViews,0); setListAdapter(mAdapter); //Preparetheloader.Eitherre-connectwithanexistingone, //orstartanewone. getLoaderManager().initLoader(0,null,this); } //CalledwhenanewLoaderneedstobecreated publicLoader onCreateLoader(intid,Bundleargs){ //NowcreateandreturnaCursorLoaderthatwilltakecareof //creatingaCursorforthedatabeingdisplayed. returnnewCursorLoader(this,ContactsContract.Data.CONTENT_URI, PROJECTION,SELECTION,null,null); } //Calledwhenapreviouslycreatedloaderhasfinishedloading publicvoidonLoadFinished(Loader loader,Cursordata){ //Swapthenewcursorin.(Theframeworkwilltakecareofclosingthe //oldcursoroncewereturn.) mAdapter.swapCursor(data); } //Calledwhenapreviouslycreatedloaderisreset,makingthedataunavailable publicvoidonLoaderReset(Loader loader){ //ThisiscalledwhenthelastCursorprovidedtoonLoadFinished() //aboveisabouttobeclosed.Weneedtomakesureweareno //longerusingit. mAdapter.swapCursor(null); } @Override publicvoidonListItemClick(ListViewl,Viewv,intposition,longid){ //Dosomethingwhenalistitemisclicked } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。