转载请注明出处: http://blog.csdn.net/like_program/article/details/52901492
ListView 想必大家都很熟悉了,当有大量数据需要显示时,通常不会一次性把数据全部加载显示出来,而是会先加载一部分,当用户滑动屏幕滑到最后一条数据时,再加载下一部分数据。也就是分批加载。
这篇博客将讲解如何实现 ListView 的分批加载数据。
首先来说下它的原理,其实原理很简单:
在 ListView 下滑的过程中,不停检查 ListView 有没有滑到底(数据源的最后一个数据是否可见),如果滑到底了,就加载下一批数据,并把加载的数据追加到 ListView 适配器的数据源中,然后调用 adapter.notifyDataSetChanged() ,就可以刷新界面,将新增的数据显示出来,从而达到分批加载数据的效果。
好了,原理我们已经知道了,那就来写个 Demo 体验一下。
打开 Android Studio,新建 ListViewLoadTest 项目。
新建 MySQLiteOpenHelper.java,继承自 SQLiteOpenHelper,在这个类中,我们将实现创建数据库和表的逻辑。
MySQLiteOpenHelper.java 代码如下所示:
package com.example.listviewloadtest;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
/**
* 数据库名字
*/
private static final String DB_NAME = "database.db";
/**
* 数据库版本
*/
private static final int DB_VERSION = 1;
/**
* 建表语句
*/
private static final String CREATE_TABLE =
"create table dataList (" +
"_id integer primary key autoincrement, " +
"number varchar(20))";
public MySQLiteOpenHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
代码很简单,就是创建了一个名字叫 database.db 的数据库,和名字叫 dataList 的表,_id 是表的主键,自增。number 就是我们等会要加载的数据。
我们再新建 Dao.java ,在这个类中,实现对数据库的操作。
Dao.java 代码如下所示:
package com.example.listviewloadtest;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
public class Dao {
private static final String KEY_NUMBER = "number";
private static final String TABLE_NAME = "dataList";
public MySQLiteOpenHelper helper;
public Dao(Context context) {
helper = new MySQLiteOpenHelper(context);
}
/**
* 插入数据
*
*