今天项目中遇到个问题,之前数据量不算多的时候,ListView显示正常,但是当数据量很大得分时候,进入画面,显示数据比较慢,
而且不能放在UI线程中去拿数据,用子线程去拿把,画面出来了,但是数据要等很久才会出来,因此,这样给人的体验很不好,算不上好的设计。
因此,查了一下,关于数据库分页ListView分页。
对于ListView分页,不管是本地数据查询,还是网络数据获取,都应该是常见而且不可以忽视的一点吧。
下面介绍一下我的这个demo。
流程简述:
我在raw文件夹下面放了名称为city的数据库,里面包含全国2330个城市,以及所属省,拼音简写等信息。
首先在进入MainActivity的时候,创建数据库并读入sd卡文件中data/data/databases/city。
然后我再开启子线程去读取前50条数据,显示在ListView中。
当用户浏览数据,前50条不够时,他会滑动ListView以查看更多数据,此时,listview的数据源会递增,50 ,100,150,。。。。
以50为增量不断增加.....
这样避免了因一次性加载数据造成ANR,也给用户比较好的体验。
工程目录结构:
cls_city是城市信息类,Common是工具类,ViewHolder是ListView缓存机制帮助类,DataBaseHelper 数据库操作工具类/.....
package com.example.sqlitepagetest;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import android.database.Cursor;
import android.util.Log;
/**
* <p>
* </p>
* 下午9:12:42
*
* @auther dalvikCoder
*/
public class cls_city {
public String _id = "";
public String province = "";
public String name = "";
/**
*
* select _id,province ,name from city order by _id limit perItemNum Offset
* currentPage*perItemNum ;--currentPage 从零开始
* <p>
* 根据条目数量查询
* </p>
*
* @param dbh
* @param num
* num[1]-->每一页显示的条目数量 num[0]--->从第几条开始
* @return List<cls_city>
*/
public static List<cls_city> getC