首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
rsa
command
install
timestamp
expression
dagger
testing
web3
bitmap
import
golang
foreach
perl
hook
object
emoji
java
range
blob
metadata
数组
python2
cpython
get
hashset
node.js
nodejs
list
netty
yaml
export
instance
web
scala
js
client
datetime
c语言
audio
bash
timezone
fetch
input
select
eval
buffer
tree
express
cPlusPlus
split
email
shell
filter
random
typescript
case
cmd
function
loops
byte
solr
include
default
int
hashcode
flutter
cSharp
go
future
python3
python
jsp
runtime
uml
controller
heatmap
usb
integer
sum
当前位置:
开发笔记
>
编程语言
> 正文
android中滑动SQLite数据库分页加载
作者:为你空手的执着 | 来源:互联网 | 2023-05-19 02:32
packagecom.example.testscrollsqlite;importjava.util.ArrayList;importandroid.app.ActionB
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
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
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
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
[java]
view plain
copy
print
?
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
[java]
view plain
copy
print
?
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
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
titles =
new
ArrayList
();
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
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
items =
new
ArrayList
();
int
columnCount = mCursor.getColumnCount();
while
(mCursor.moveToNext()) {
String item = mCursor.getString(mCursor
.getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));
items.add(item);
}
//不要关闭数据库
return
items;
}
}
activity_main.xml
[html]
view plain
copy
print
?
<
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
>
android
sql
sqlite
数据库
package
scroll
import
java
list
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
import
Android开发实现的计时器功能示例
本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ...
[详细]
蜡笔小新 2023-12-12 22:51:19
object
Flutter 布局(四) Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth详解
本文主要介绍Flutter布局中的Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth四种控件,详细介绍了其布局 ...
[详细]
蜡笔小新 2023-10-17 18:17:09
perl
Android 新闻App的本地服务器搭建教程
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
perl
后台获取视图对应的字符串
1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ...
[详细]
蜡笔小新 2023-12-13 18:03:01
import
Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ...
[详细]
蜡笔小新 2023-12-12 20:56:55
import
深入理解CSS中的margin属性及其应用场景
本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ...
[详细]
蜡笔小新 2023-12-12 18:01:10
yaml
使用Flutter新的integration_test进行示例集成测试?
使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ...
[详细]
蜡笔小新 2023-10-17 13:40:53
yaml
四、连接屏幕流
四、连接屏幕流各位读者好!我们已经到了应用开发的一个重要阶段——连接屏幕。如您所知,我们在上一章 ...
[详细]
蜡笔小新 2023-10-16 11:48:07
yaml
HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ...
[详细]
蜡笔小新 2023-12-14 15:08:18
get
VB.NET在线急等问题解决方法,如何统计数据库字段下的数据并显示在文本框里?
本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ...
[详细]
蜡笔小新 2023-12-13 15:15:30
list
关于Linq to sql 实现 模糊查询 string数组
前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ...
[详细]
蜡笔小新 2023-12-13 09:34:59
list
怎么在Android 应用中实现一个换肤功能
今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ...
[详细]
蜡笔小新 2023-10-17 19:36:15
list
详解Android 自定义UI模板设计_由浅入深
学习安卓已有一些日子,前段时间整理了不少笔记,但是发现笔记不变分享与携带。今天开始整理博客,全当是与大家分享交流与自身学习理解的过程吧。结合最近在做的一个新闻类app及学习中的问题,一点一点整理一下, ...
[详细]
蜡笔小新 2023-10-17 18:08:39
list
一对一直播源码开发,表情面板无缝切换的实现
在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ...
[详细]
蜡笔小新 2023-10-17 14:59:17
get
开发笔记:图像识别基于主成分分析算法实现人脸二维码识别
篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于主成分分析算法实现人脸二维码识别相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-10-17 14:55:32
为你空手的执着
这个家伙很懒,什么也没留下!
Tags | 热门标签
rsa
command
install
timestamp
expression
dagger
testing
web3
bitmap
import
golang
foreach
perl
hook
object
emoji
java
range
blob
metadata
数组
python2
cpython
get
hashset
node.js
nodejs
list
netty
yaml
RankList | 热门文章
1
扫描识别工具Dynamic Web TWAIN使用教程:如何将本地图像加载到查看器中
2
java并发学习第二章 spring boot实现线程的创建
3
在保护野生动物面前,AI与人类一起发力
4
如何从.txt文件中读取内容,然后在Java中找到上述内容的平均值?
5
基于OHCI的USB主机 —— 寄存器层(说明)
6
《山中送从叔简》翻译 原文赏析诗人唐孟郊
7
C语言中按位取反(~)操作符
8
maven手动安装jar包
9
查询天气 python3可识别输入城市
10
python模块datetime的使用2
11
求不更学不动之Redis5.0新特性Stream尝鲜
12
RHEL5.6 64bit安装oracle 11gR2单节点数据库
13
一款清新的jQuery日历插件 带日期的Tooltip提示
14
求一个整型矩阵的对角线的元素之和是多少
15
Java Corba工具OpenORB的部署和使用(用于编译Corba的idl)
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有