今天用到了android中滑动SQlit数据库分页加载技术,写了个测试工程,将代码贴出来和大家交流一下:

MainActivity

package com.example.testscrollsqlite;

import java.util.ArrayList;

import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity implements OnScrollListener{
private TextView loadInfo;
private ListView listView;
private LinearLayout loadLayout;
private ArrayList<String> items;
private DatabaseService service;
private int currentPage = 1; //默认在第一页
private static final int lineSize = 7; //每次显示数
private int allRecorders = 0; //全部记录数
private int pageSize = 1; //默认共一页
private int lastItem;
private Aleph0 baseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
//创建一个角标线性布局用来显示"正在加载"
loadLayout = new LinearLayout(this);
loadLayout.setGravity(Gravity.CENTER);
//定义一个文本显示“正在加载”
loadInfo = new TextView(this);
loadInfo.setText("正在加载...");
loadInfo.setGravity(Gravity.CENTER);
//增加组件
loadLayout.addView(loadInfo, new LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
//增加到listView底部
listView.addFooterView(loadLayout);
listView.setOnScrollListener(this); showAllData(); } /**
* 读取全部数据
*/
public void showAllData(){
service = new DatabaseService(this);
allRecorders = service.getCount();
//计算总页数
pageSize = (allRecorders + lineSize -1) / lineSize;
System.out.println("allRecorders = " + allRecorders);
System.out.println("pageSize = " + pageSize);
items = service.getAllItems(currentPage, lineSize);
for(int i=0; i<items.size(); i++){
System.out.println(items.get(i));
}
baseAdapter = new Aleph0();
listView.setAdapter(baseAdapter);
} @Override
public void onScroll(AbsListView view, int firstVisible, int visibleCount,
int totalCount) {
lastItem = firstVisible + visibleCount - 1; //统计是否到最后 } @Override
public void onScrollStateChanged(AbsListView view, int scorllState) {
System.out.println("进入滚动界面了");
//是否到最底部并且数据没读完
if(lastItem == baseAdapter.getCount()
&& currentPage < pageSize //不再滚动
&& scorllState == OnScrollListener.SCROLL_STATE_IDLE){
currentPage ++;
//设置显示位置
listView.setSelection(lastItem);
//增加数据
appendDate();
} } /**
* 增加数据
*/
private void appendDate(){
ArrayList<String> additems = service.getAllItems(currentPage, lineSize);
baseAdapter.setCount(baseAdapter.getCount() + additems.size());
//判断,如果到了最末尾则去掉“正在加载”
if(allRecorders == baseAdapter.getCount()){
listView.removeFooterView(loadLayout);
}
items.addAll(additems);
//通知记录改变
baseAdapter.notifyDataSetChanged();
} class Aleph0 extends BaseAdapter {
int count = lineSize; /* starting amount */ public int getCount() {
return count;
} public void setCount(int count){
this.count = count;
} public Object getItem(int pos) {
return pos;
} public long getItemId(int pos) {
return pos;
} public View getView(int pos, View v, ViewGroup p) {
TextView view = new TextView(MainActivity.this);
view.setTextSize(60);
if(items != null){
view.setText(items.get(pos));
}else{
view.setText(pos);
}
return view;
}
} }

MyDBOpenHelper

package com.example.testscrollsqlite;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns; public class MyDBOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "merit.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "database";
public static final String FIELD_TITLE = "title"; /**
*
* @param context
* 上下文
* @param name
* 数据库的名字
* @param factory
* 结果集游标工厂(一般使用默认)
* @param version
* 数据库的版本号(必须version>=1)
*/
public MyDBOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
} /**
* 在MyDBOpenHelper第一次new出来时,系统会调用onCreate方法
*/
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("我被调用了"); String sql = "Create table " + TABLE_NAME + "(" + BaseColumns._ID
+ " integer primary key autoincrement," + FIELD_TITLE
+ " text )";
db.execSQL(sql);
initDatabase(db); } // 向数据库的表中插入一些数据。
private void initDatabase(SQLiteDatabase db) {
ContentValues cv = new ContentValues();
cv.put("title", "cctv1 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv2 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv3 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv4 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv5 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv6 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv7 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv8 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv9 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("title", "cctv10 news");
db.insert(TABLE_NAME, null, cv); cv.clear();
cv.put("news_title", "guangshui tv");
db.insert(TABLE_NAME, null, cv);
} @Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub } }

DatabaseService

package com.example.testscrollsqlite;

import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; public class DatabaseService { private Context mContext;
private MyDBOpenHelper dbHelper; public DatabaseService(Context context) {
// TODO Auto-generated constructor stub
mContext = context;
dbHelper = new MyDBOpenHelper(mContext);
} // 添加
public void insert(String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "insert into database(title) values(?)";
db.execSQL(sql, new String[] { title });
} // 删除
public void delete(String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "delete from database where title = ?";
db.execSQL(sql, new String[] { title });
} // 查找
public ArrayList<String> find(int id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "select * from database where _id = ? ";
Cursor c = db.rawQuery(sql, new String[] { String.valueOf(id) });
ArrayList<String> titles = new ArrayList<String>();
if (c.moveToNext()) {
String title = c.getString(c
.getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));
titles.add(title);
return titles;
}
// 不用忘记关闭Cursor。
c.close();
return null;
} // 更新
public void upDate(int id, String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "update database set title =? where _id = ?";
db.execSQL(sql,
new String[] { String.valueOf(title), String.valueOf(id) });
} // 查询记录的总数
public int getCount() {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "select count(*) from database";
Cursor c = db.rawQuery(sql, null);
c.moveToFirst();
int length = c.getInt(0);
c.close();
return length;
} /**
* 分页查询
*
* @param currentPage 当前页
* @param pageSize 每页显示的记录
* @return 当前页的记录
*/
public ArrayList<String> getAllItems(int currentPage, int pageSize) {
int firstResult = (currentPage - 1) * pageSize;
int maxResult = currentPage * pageSize;
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "select * from database limit ?,?";
Cursor mCursor = db.rawQuery(
sql,
new String[] { String.valueOf(firstResult),
String.valueOf(maxResult) });
ArrayList<String> items = new ArrayList<String>();
int columnCount = mCursor.getColumnCount();
while (mCursor.moveToNext()) {
String item = mCursor.getString(mCursor
.getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));
items.add(item); }
//不要关闭数据库
return items;
}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical" >
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listview"> </ListView> </LinearLayout>

源代码下载http://download.csdn.net/detail/lxq_xsyu/5955673

android中滑动SQLite数据库分页加载的更多相关文章

  1. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  2. Android中操作SQLite数据库

    我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...

  3. android中的SQLite数据库

    SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法 SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQ ...

  4. Android中插件开发篇之----动态加载Activity(免安装运行程序)

    一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...

  5. 关于Android中Fragment静态和动态加载的方法

    一.静态加载 1.首先创建一个layout布局fragment.xml,里面放要显示和操作的控件 2.创建一个layout布局main1.xml,用来实现页面的跳转(跳转为要实现静态加载的界面) 3. ...

  6. Android中的WebView进行直接加载网页(要注意解决权限问题)

    我们都知道Android的网络功能很不错,当然Android中WebView组件也挺不错,可以直接进行加载网页,我们可以把这个看做一个小型的浏览器\ [注]以下的一些内容我翻译了一下文档,可能有些翻译 ...

  7. Android中GridView滚动到底部加载数据终极版

    之前在项目中有一个需求是需要GridView控件,滚动到底部自动加载.但是呢GridView控件并不提供诸如ListView监听滚动到底部的onScrollListener方法,为了实现这样一个效果, ...

  8. Android中通过Java获取Webview加载内容

    有时候我们需要在加载webview时,获取加载完成的内容,当然,WebView也是有可能包含javascript.通过以下操作,我们是可以获取到WebView加载的内容. 1.自定义一个内部类,获取W ...

  9. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

随机推荐

  1. Android Java Mail与Apache Mail发送邮件对比

    原文链接: 一.邮件简介  一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等:  1.收件人:收件人的邮箱地址,例如xxx@xx.com  2.收件人姓名:大部分的邮件显示时都会显 ...

  2. C语言结构体的字节对齐原则

    为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据 ...

  3. 9.5 Binder系统_驱动情景分析_transaction_stack机制

    参考文章:http://www.cnblogs.com/samchen2009/p/3316001.html test_server服务进程可能有多个线程,而在发送数据的时候handle只表示了那个进 ...

  4. Shiro的Filter机制详解---源码分析(转)

    Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...

  5. Chrome 临时目录

    mklink /J "C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default\Cache" " ...

  6. 搭建hbase-0.94.26集群环境 分类: B7_HBASE 2015-01-24 17:14 861人阅读 评论(0) 收藏

    先安装hadoop1.2.1,见http://blog.csdn.net/jediael_lu/article/details/38926477 1.配置hbase-site.xml <prop ...

  7. swift 旋转加载动画

    https://github.com/naoyashiga/RPLoadingAnimation

  8. [RxJS] Convert RxJS Subjects to Observables

    The use of RxJS Subjects is common, but not without problems. In this lesson we will see how they ca ...

  9. arm交叉编译Valgrind

    1. wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2 tar xvf valgrind-3.9.0.tar.bz2 cd valgr ...

  10. An Overview of Cisco IOS Versions and Naming

    An Overview of Cisco IOS Versions and Naming http://www.ciscopress.com/articles/article.asp?p=210654 ...