ListView动态加载数据 推荐
2011-08-28 10:01
369 查看
当listview需要加载的数据过多时,若一次性载入则速度会相当缓慢,影响用户体验,这时候就需要动态加载数据,即每次载入固定长度的数据,android market的listview就是采用这种方式,使得加载看起来很平滑,响应速度很快,有助于提高用户体验。
首先,要实现动态加载首先需要在获取数据时每次在上次获取到的数据之后的位置开始取得固定长度的数据,可通过"select * from TableName LIMIT m OFFSET n"语句实现,其中m是要取得数据的长度,n是数据的偏移量。
然后,在Activity中需要重写listview的onScroll方法,在onScroll中添加判断条件,当上一次加载的数据显示完并滑动到底部之后需要再次获取数据,可以在UI Thread中在开启一个线程去加载数据,加载数据时应弹出一个试图提示用户正在加载。
最后,加载数据的线程处理完毕后,刷新ListView。
以下是实现动态加载的主要步骤:
首先,要实现动态加载首先需要在获取数据时每次在上次获取到的数据之后的位置开始取得固定长度的数据,可通过"select * from TableName LIMIT m OFFSET n"语句实现,其中m是要取得数据的长度,n是数据的偏移量。
然后,在Activity中需要重写listview的onScroll方法,在onScroll中添加判断条件,当上一次加载的数据显示完并滑动到底部之后需要再次获取数据,可以在UI Thread中在开启一个线程去加载数据,加载数据时应弹出一个试图提示用户正在加载。
最后,加载数据的线程处理完毕后,刷新ListView。
以下是实现动态加载的主要步骤:
//加载数据的方法 private void fillAdapter(int count, int begin) { // TODO Auto-generated method stub SQLiteOpenHelper mSQLiteOpenHelper = new SQLiteOpenHelper ( this); Cursor c= mSQLiteOpenHelper .getDynamicListViewData(count, offset); }
//监听listview的onScroll方法 OnScrollListener listScroll = new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(isLoading) //正在加载时就不要让在执行活动触发事件 return; if (firstVisibleItem + visibleItemCount == totalItemCount) { // 开线程去获取数据 if (totalItemCount <= totalItemsCount) { Integer[] params = new Integer[] { 25, currentItemCount }; mAsynchTask = new AsynchTask(); mAsynchTask.execute(params); } else { Toast.makeText(EventTracker.this, "there is no data!", Toast.LENGTH_SHORT).show(); } } } };
//通过AsyncTask更方便的实现多线程管理,使得加载效果更平滑 private class AsynchTask extends AsyncTask<Integer, Void, Void> { @Override /**将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。 * 这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法 * 来更新实时的任务进度。该方法是抽象方法,子类必须实现。 */ protected Void doInBackground(Integer... params) { fillAdapter(params[0], params[1]); return null; } @Override /** 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用, * 后台的计算结果将通过该方法传递到UI thread. * */ protected void onPreExecute() { //loadingView为自定义的一个dialog,用于提示用户正在加载 mEventListView.addFooterView(loadingView); isLoading=true; } @Override /** 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用, * 后台的计算结果将通过该方法传递到UI thread. * */ protected void onPostExecute(Void result) { bindAdapter(); mListView.removeFooterView(loadingView); mListView.setSelection(currentItemCount); currentItemCount += 25;//每次加载25列,偏移量也递增25 isLoading=false; } }
数据库中方法如下: public Cursor getDynamicListViewData(int count, int offset) { return getReadableDatabase().rawQuery( "select * from TableName limit " + count + "offset" + offset, null); }
相关文章推荐
- android结合异步任务,动态加载图片,Json解析数据展示在ListView,并且实现按日期分类展示,借口回调
- ListView动态加载网络数据的解决办法
- Android列表组件ListView使用详解之动态加载或修改列表数据
- Listview动态加载数据
- ListView动态加载更多数据
- [置顶] Android_ListView_Adapter使用和数据动态加载
- Android的ListView动态加载数据
- Android_ListView_Adapter使用和数据动态加载
- ListView动态加载数据模板(使用xml布局)
- Android listView 动态加载数据,下拉加载数据,上拉加载数据
- Android_ListView_Adapter使用和数据动态加载
- Android实现listview动态加载数据分页的两种方法
- listView配合适配器动态的加载服务器中返回的数据
- viewPager动态加载listview数据
- EditText + ListView 之间的搜索配置 动态加载ListView数据
- Android中ListView动态加载数据
- ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
- 【Android动态布局】之【ListView动态加载数据】
- 安卓开发之ListView(HorizontalListView)横向动态加载数据例子
- Listview动态加载数据