热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android中滑动SQLite数据库分页加载

packagecom.example.testscrollsqlite;importjava.util.ArrayList;importandroid.app.ActionB
  1. package com.example.testscrollsqlite;  
  2.   
  3.   
  4. import java.util.ArrayList;  
  5.   
  6. import android.app.ActionBar.LayoutParams;  
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.view.Gravity;  
  10. import android.view.Menu;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.AbsListView;  
  14. import android.widget.AbsListView.OnScrollListener;  
  15. import android.widget.Adapter;  
  16. import android.widget.BaseAdapter;  
  17. import android.widget.LinearLayout;  
  18. import android.widget.ListView;  
  19. import android.widget.TextView;  
  20.   
  21. public class MainActivity extends Activity implements OnScrollListener{  
  22.     private TextView loadInfo;  
  23.     private ListView listView;  
  24.     private LinearLayout loadLayout;  
  25.     private ArrayList items;  
  26.     private DatabaseService service;  
  27.     private int currentPage = 1//默认在第一页  
  28.     private static final int lineSize = 7;    //每次显示数   
  29.     private int allRecorders = 0;  //全部记录数  
  30.     private int pageSize = 1;  //默认共一页  
  31.     private int lastItem;  
  32.     private Aleph0 baseAdapter;  
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.activity_main);  
  37.         listView = (ListView) findViewById(R.id.listview);  
  38.         //创建一个角标线性布局用来显示"正在加载"  
  39.         loadLayout = new LinearLayout(this);  
  40.         loadLayout.setGravity(Gravity.CENTER);  
  41.         //定义一个文本显示“正在加载”  
  42.         loadInfo = new TextView(this);    
  43.         loadInfo.setText("正在加载...");  
  44.         loadInfo.setGravity(Gravity.CENTER);  
  45.         //增加组件   
  46.         loadLayout.addView(loadInfo, new LayoutParams(  
  47.                 LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));  
  48.         //增加到listView底部  
  49.         listView.addFooterView(loadLayout);  
  50.         listView.setOnScrollListener(this);  
  51.           
  52.           
  53.           
  54.         showAllData();  
  55.           
  56.     }  
  57.       
  58.     /** 
  59.      * 读取全部数据 
  60.      */  
  61.     public void showAllData(){  
  62.         service = new DatabaseService(this);  
  63.         allRecorders = service.getCount();  
  64.         //计算总页数  
  65.         pageSize = (allRecorders + lineSize -1) / lineSize;    
  66.         System.out.println("allRecorders =  " + allRecorders);  
  67.         System.out.println("pageSize  =  " + pageSize);  
  68.         items = service.getAllItems(currentPage, lineSize);  
  69.         for(int i=0; i
  70.             System.out.println(items.get(i));  
  71.         }  
  72.         baseAdapter = new Aleph0();  
  73.         listView.setAdapter(baseAdapter);  
  74.     }  
  75.   
  76.     @Override  
  77.     public void onScroll(AbsListView view, int firstVisible, int visibleCount,  
  78.             int totalCount) {  
  79.         lastItem = firstVisible + visibleCount - 1//统计是否到最后  
  80.           
  81.     }  
  82.   
  83.     @Override  
  84.     public void onScrollStateChanged(AbsListView view, int scorllState) {  
  85.         System.out.println("进入滚动界面了");  
  86.         //是否到最底部并且数据没读完  
  87.         if(lastItem == baseAdapter.getCount()   
  88.                 && currentPage < pageSize    //不再滚动  
  89.                 && scorllState == OnScrollListener.SCROLL_STATE_IDLE){  
  90.             currentPage ++;  
  91.             //设置显示位置  
  92.             listView.setSelection(lastItem);  
  93.             //增加数据  
  94.             appendDate();     
  95.         }  
  96.           
  97.     }  
  98.       
  99.     /** 
  100.      * 增加数据 
  101.      */  
  102.     private void appendDate(){  
  103.         ArrayList additems = service.getAllItems(currentPage, lineSize);  
  104.         baseAdapter.setCount(baseAdapter.getCount() + additems.size());  
  105.         //判断,如果到了最末尾则去掉“正在加载”  
  106.         if(allRecorders == baseAdapter.getCount()){  
  107.             listView.removeFooterView(loadLayout);  
  108.         }  
  109.         items.addAll(additems);  
  110.         //通知记录改变  
  111.         baseAdapter.notifyDataSetChanged();  
  112.     }  
  113.       
  114.     class Aleph0 extends BaseAdapter {  
  115.         int count = lineSize; /* starting amount */  
  116.   
  117.         public int getCount() {  
  118.             return count;  
  119.         }   
  120.           
  121.         public void setCount(int count){  
  122.             this.count = count;  
  123.         }  
  124.   
  125.         public Object getItem(int pos) {  
  126.             return pos;  
  127.         }  
  128.   
  129.         public long getItemId(int pos) {  
  130.             return pos;  
  131.         }  
  132.   
  133.         public View getView(int pos, View v, ViewGroup p) {  
  134.             TextView view = new TextView(MainActivity.this);  
  135.             view.setTextSize(60);  
  136.             if(items != null){  
  137.                 view.setText(items.get(pos));  
  138.             }else{  
  139.                 view.setText(pos);  
  140.             }  
  141.             return view;  
  142.         }  
  143.     }  
  144.       
  145.       
  146.   
  147. }  


 

MyDBOpenHelper

[java] view plain copy print?
  1. package com.example.testscrollsqlite;  
  2.   
  3. import android.content.ContentValues;  
  4. import android.content.Context;  
  5. import android.database.sqlite.SQLiteDatabase;  
  6. import android.database.sqlite.SQLiteOpenHelper;  
  7. import android.provider.BaseColumns;  
  8.   
  9. public class MyDBOpenHelper extends SQLiteOpenHelper {  
  10.     private static final String DATABASE_NAME = "merit.db";  
  11.     private static final int DATABASE_VERSION = 1;  
  12.     private static final String TABLE_NAME = "database";  
  13.     public static final String FIELD_TITLE = "title";  
  14.   
  15.     /** 
  16.      *  
  17.      * @param context 
  18.      *            上下文 
  19.      * @param name 
  20.      *            数据库的名字 
  21.      * @param factory 
  22.      *            结果集游标工厂(一般使用默认) 
  23.      * @param version 
  24.      *            数据库的版本号(必须version>=1) 
  25.      */  
  26.     public MyDBOpenHelper(Context context) {  
  27.         super(context, DATABASE_NAME, null, DATABASE_VERSION);  
  28.     }  
  29.   
  30.     /** 
  31.      * 在MyDBOpenHelper第一次new出来时,系统会调用onCreate方法 
  32.      */  
  33.     @Override  
  34.     public void onCreate(SQLiteDatabase db) {  
  35.         System.out.println("我被调用了");  
  36.   
  37.         String sql = "Create table " + TABLE_NAME + "(" + BaseColumns._ID  
  38.                 + " integer primary key autoincrement," + FIELD_TITLE  
  39.                 + " text )";  
  40.         db.execSQL(sql);  
  41.         initDatabase(db);  
  42.           
  43.     }  
  44.   
  45.     // 向数据库的表中插入一些数据。  
  46.     private void initDatabase(SQLiteDatabase db) {  
  47.         ContentValues cv = new ContentValues();  
  48.         cv.put("title""cctv1 news");  
  49.         db.insert(TABLE_NAME, null, cv);  
  50.   
  51.         cv.clear();  
  52.         cv.put("title""cctv2 news");  
  53.         db.insert(TABLE_NAME, null, cv);  
  54.   
  55.         cv.clear();  
  56.         cv.put("title""cctv3 news");  
  57.         db.insert(TABLE_NAME, null, cv);  
  58.   
  59.         cv.clear();  
  60.         cv.put("title""cctv4 news");  
  61.         db.insert(TABLE_NAME, null, cv);  
  62.   
  63.         cv.clear();  
  64.         cv.put("title""cctv5 news");  
  65.         db.insert(TABLE_NAME, null, cv);  
  66.   
  67.         cv.clear();  
  68.         cv.put("title""cctv6 news");  
  69.         db.insert(TABLE_NAME, null, cv);  
  70.   
  71.         cv.clear();  
  72.         cv.put("title""cctv7 news");  
  73.         db.insert(TABLE_NAME, null, cv);  
  74.   
  75.         cv.clear();  
  76.         cv.put("title""cctv8 news");  
  77.         db.insert(TABLE_NAME, null, cv);  
  78.   
  79.         cv.clear();  
  80.         cv.put("title""cctv9 news");  
  81.         db.insert(TABLE_NAME, null, cv);  
  82.   
  83.         cv.clear();  
  84.         cv.put("title""cctv10 news");  
  85.         db.insert(TABLE_NAME, null, cv);  
  86.   
  87.         cv.clear();  
  88.         cv.put("news_title""guangshui tv");  
  89.         db.insert(TABLE_NAME, null, cv);  
  90.     }  
  91.   
  92.     @Override  
  93.     public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {  
  94.         // TODO Auto-generated method stub  
  95.   
  96.     }  
  97.   
  98. }  


 

DatabaseService

[java] view plain copy print?
  1. package com.example.testscrollsqlite;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.content.Context;  
  6. import android.database.Cursor;  
  7. import android.database.sqlite.SQLiteDatabase;  
  8.   
  9. public class DatabaseService {   
  10.   
  11.     private Context mContext;  
  12.     private MyDBOpenHelper dbHelper;  
  13.       
  14.   
  15.     public DatabaseService(Context context) {  
  16.         // TODO Auto-generated constructor stub  
  17.         mContext = context;  
  18.         dbHelper = new MyDBOpenHelper(mContext);  
  19.     }  
  20.   
  21.     // 添加  
  22.     public void insert(String title) {  
  23.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  24.         String sql = "insert into database(title) values(?)";  
  25.         db.execSQL(sql, new String[] { title });  
  26.     }  
  27.   
  28.     // 删除  
  29.     public void delete(String title) {  
  30.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  31.         String sql = "delete from database where title = ?";  
  32.         db.execSQL(sql, new String[] { title });  
  33.     }  
  34.   
  35.     // 查找  
  36.     public ArrayList find(int id) {  
  37.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  38.         String sql = "select * from database where _id = ? ";  
  39.         Cursor c = db.rawQuery(sql, new String[] { String.valueOf(id) });  
  40.         ArrayList titles = new ArrayList();  
  41.         if (c.moveToNext()) {  
  42.             String title = c.getString(c  
  43.                     .getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));  
  44.             titles.add(title);  
  45.             return titles;  
  46.         }  
  47.         // 不用忘记关闭Cursor。  
  48.         c.close();  
  49.         return null;  
  50.     }  
  51.   
  52.     // 更新  
  53.     public void upDate(int id, String title) {  
  54.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  55.         String sql = "update database set title =? where _id = ?";  
  56.         db.execSQL(sql,  
  57.                 new String[] { String.valueOf(title), String.valueOf(id) });  
  58.     }  
  59.   
  60.     // 查询记录的总数  
  61.     public int getCount() {  
  62.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  63.         String sql = "select count(*) from database";  
  64.         Cursor c = db.rawQuery(sql, null);  
  65.         c.moveToFirst();  
  66.         int length = c.getInt(0);  
  67.         c.close();  
  68.         return length;  
  69.     }  
  70.   
  71.     /** 
  72.      * 分页查询 
  73.      *  
  74.      * @param currentPage 当前页 
  75.      * @param pageSize 每页显示的记录 
  76.      * @return 当前页的记录 
  77.      */  
  78.     public ArrayList getAllItems(int currentPage, int pageSize) {  
  79.         int firstResult = (currentPage - 1) * pageSize;  
  80.         int maxResult = currentPage * pageSize;  
  81.         SQLiteDatabase db = dbHelper.getWritableDatabase();  
  82.         String sql = "select * from database limit ?,?";  
  83.         Cursor mCursor = db.rawQuery(  
  84.                 sql,  
  85.                 new String[] { String.valueOf(firstResult),  
  86.                         String.valueOf(maxResult) });  
  87.         ArrayList items = new ArrayList();  
  88.         int columnCount  = mCursor.getColumnCount();  
  89.         while (mCursor.moveToNext()) {  
  90.             String item = mCursor.getString(mCursor  
  91.                     .getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));  
  92.             items.add(item);  
  93.               
  94.         }  
  95.         //不要关闭数据库  
  96.         return items;  
  97.     }  
  98. }  

 

activity_main.xml

[html] view plain copy print?
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent"  
  4.       
  5.     android:orientation="vertical" >  
  6.     <ListView   
  7.         android:layout_width="match_parent"  
  8.         android:layout_height="wrap_content"  
  9.         android:id="@+id/listview">  
  10.           
  11.     ListView>  
  12.   
  13. LinearLayout>  

推荐阅读
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Flutter 布局(四) Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth详解
    本文主要介绍Flutter布局中的Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth四种控件,详细介绍了其布局 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
  • 四、连接屏幕流各位读者好!我们已经到了应用开发的一个重要阶段——连接屏幕。如您所知,我们在上一章 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 详解Android  自定义UI模板设计_由浅入深
    学习安卓已有一些日子,前段时间整理了不少笔记,但是发现笔记不变分享与携带。今天开始整理博客,全当是与大家分享交流与自身学习理解的过程吧。结合最近在做的一个新闻类app及学习中的问题,一点一点整理一下, ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • 开发笔记:图像识别基于主成分分析算法实现人脸二维码识别
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于主成分分析算法实现人脸二维码识别相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
为你空手的执着
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有