Android ListView 正在加载 异步载入数据 CursorLoader 例子

网友投稿 252 2022-09-02

Android ListView 正在加载 异步载入数据 CursorLoader 例子

还记得这篇文章吗?​​Android ListView 最基本的用法,使用SimpleCursorAdapter 。 附例子。​​我在使用的时候,载入大量数据时,开始会很卡,滑动倒是不会卡,就是因为开始载入是用一条sql语句查询所有数据。Android中遇到这样的问题一般用线程来执行。看了下Android 4.0 Contacts的载入方式,它非常流畅。发现它用了CursorLoader ,这里用它来做一个小小的例子。左边的是刚开始的效果,你也可以改成一个dialog罩住不让用户用。右边的是载入完成的样子,设计到联系人隐私,画了下。

CursorLoader 还是蛮好用的不过它Added in API level 11,Android 3.0才能用。Android2.3即以下都不能用,比较遗憾。

哦,对了,下面这应用别忘记加上读取联系人权限。

MainActivity.java

package com.waitingfy.android;import android.app.ListActivity;import android.app.LoaderManager.LoaderCallbacks;import android.content.Loader;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.widget.SimpleCursorAdapter;import android.widget.TextView;public class MainActivity extends ListActivity implements LoaderCallbacks {//1.首先要实现这接口 private TextView mNoticeMessage; private SimpleCursorAdapter mAdapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mNoticeMessage = (TextView)findViewById(R.id.notice_message); getLoaderManager().initLoader(1, null, this);//2.要初始化Loader } public Loader onCreateLoader(int id, Bundle args) { return new MyCursorLoader(getApplicationContext());//3.去数据库读取数据等要消耗大量时间的操作放在 //自定义 CursorLoader 的 onLoadInBackground } /** * 4.自定义 CursorLoader 的 onLoadInBackground * 会返回一个Cursor,这里给SimpleCursorAdapter用 * 来填充数据。 */ public void onLoadFinished(Loader arg0, Cursor cursor) { mAdapter = new SimpleCursorAdapter(MainActivity.this,R.layout.contacts_list_item, cursor, new String[]{ContactsContract.Contacts.DISPLAY_NAME},new int[]{ android.R.id.text1}); setListAdapter(mAdapter); mNoticeMessage.setText(getResources().getString(R.string.count_string,mAdapter.getCount())); } public void onLoaderReset(Loader arg0) { // TODO Auto-generated method stub }}

MyCursorLoader.java

package com.waitingfy.android;import android.content.Context;import android.content.CursorLoader;import android.database.Cursor;import android.provider.ContactsContract;public class MyCursorLoader extends CursorLoader{ String[] mContactProjection={ ContactsContract.Contacts._ID, //0 ContactsContract.Contacts.DISPLAY_NAME//1 }; private Context mContext; public MyCursorLoader(Context context) { super(context); mContext = context; } /** * 查询数据等操作放在这里执行 */ @Override protected Cursor onLoadInBackground() { Cursor cursor = mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, mContactProjection, null,null, null); return cursor; }}

layout/contacts_list_item.xml

layout/main.xml

values/strings.xml

Hello World, MainActivity! CursorLoadSample 正在加载 您有%s记录

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++ Stack Application - (Parenthesis Matching) 堆栈应用之
下一篇:Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(三) APK 实现篇
相关文章

 发表评论

暂时没有评论,来抢沙发吧~