android中滑动SQLite数据库分页加载
今天用到了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数据库分页加载的更多相关文章
- android中与SQLite数据库相关的类
为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...
- Android中操作SQLite数据库
我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...
- android中的SQLite数据库
SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法 SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQ ...
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...
- 关于Android中Fragment静态和动态加载的方法
一.静态加载 1.首先创建一个layout布局fragment.xml,里面放要显示和操作的控件 2.创建一个layout布局main1.xml,用来实现页面的跳转(跳转为要实现静态加载的界面) 3. ...
- Android中的WebView进行直接加载网页(要注意解决权限问题)
我们都知道Android的网络功能很不错,当然Android中WebView组件也挺不错,可以直接进行加载网页,我们可以把这个看做一个小型的浏览器\ [注]以下的一些内容我翻译了一下文档,可能有些翻译 ...
- Android中GridView滚动到底部加载数据终极版
之前在项目中有一个需求是需要GridView控件,滚动到底部自动加载.但是呢GridView控件并不提供诸如ListView监听滚动到底部的onScrollListener方法,为了实现这样一个效果, ...
- Android中通过Java获取Webview加载内容
有时候我们需要在加载webview时,获取加载完成的内容,当然,WebView也是有可能包含javascript.通过以下操作,我们是可以获取到WebView加载的内容. 1.自定义一个内部类,获取W ...
- Android中ListView分页加载数据
public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...
随机推荐
- Android Java Mail与Apache Mail发送邮件对比
原文链接: 一.邮件简介 一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等: 1.收件人:收件人的邮箱地址,例如xxx@xx.com 2.收件人姓名:大部分的邮件显示时都会显 ...
- C语言结构体的字节对齐原则
为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据 ...
- 9.5 Binder系统_驱动情景分析_transaction_stack机制
参考文章:http://www.cnblogs.com/samchen2009/p/3316001.html test_server服务进程可能有多个线程,而在发送数据的时候handle只表示了那个进 ...
- Shiro的Filter机制详解---源码分析(转)
Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...
- Chrome 临时目录
mklink /J "C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default\Cache" " ...
- 搭建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 ...
- swift 旋转加载动画
https://github.com/naoyashiga/RPLoadingAnimation
- [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 ...
- arm交叉编译Valgrind
1. wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2 tar xvf valgrind-3.9.0.tar.bz2 cd valgr ...
- 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 ...