Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)
本文实例讲述了Android实现基于滑动的SQLite数据分页加载技术。分享给大家供大家参考,具体如下:
main.xml如下:
<menuxmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> </menu>
MainActivity.java如下:
packagecom.example.testscrollsqlite;
importjava.util.ArrayList;
importandroid.app.ActionBar.LayoutParams;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.Gravity;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.AbsListView;
importandroid.widget.AbsListView.OnScrollListener;
importandroid.widget.Adapter;
importandroid.widget.BaseAdapter;
importandroid.widget.LinearLayout;
importandroid.widget.ListView;
importandroid.widget.TextView;
publicclassMainActivityextendsActivityimplementsOnScrollListener{
privateTextViewloadInfo;
privateListViewlistView;
privateLinearLayoutloadLayout;
privateArrayList<String>items;
privateDatabaseServiceservice;
privateintcurrentPage=1;//默认在第一页
privatestaticfinalintlineSize=7;//每次显示数
privateintallRecorders=0;//全部记录数
privateintpageSize=1;//默认共一页
privateintlastItem;
privateAleph0baseAdapter;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.listview);
//创建一个角标线性布局用来显示"正在加载"
loadLayout=newLinearLayout(this);
loadLayout.setGravity(Gravity.CENTER);
//定义一个文本显示“正在加载”
loadInfo=newTextView(this);
loadInfo.setText("正在加载...");
loadInfo.setGravity(Gravity.CENTER);
//增加组件
loadLayout.addView(loadInfo,newLayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
//增加到listView底部
listView.addFooterView(loadLayout);
listView.setOnScrollListener(this);
showAllData();
}
/**
*读取全部数据
*/
publicvoidshowAllData(){
service=newDatabaseService(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(inti=0;i<items.size();i++){
System.out.println(items.get(i));
}
baseAdapter=newAleph0();
listView.setAdapter(baseAdapter);
}
@Override
publicvoidonScroll(AbsListViewview,intfirstVisible,intvisibleCount,
inttotalCount){
lastItem=firstVisible+visibleCount-1;//统计是否到最后
}
@Override
publicvoidonScrollStateChanged(AbsListViewview,intscorllState){
System.out.println("进入滚动界面了");
//是否到最底部并且数据没读完
if(lastItem==baseAdapter.getCount()
&¤tPage<pageSize//不再滚动
&&scorllState==OnScrollListener.SCROLL_STATE_IDLE){
currentPage++;
//设置显示位置
listView.setSelection(lastItem);
//增加数据
appendDate();
}
}
/**
*增加数据
*/
privatevoidappendDate(){
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();
}
classAleph0extendsBaseAdapter{
intcount=lineSize;/*startingamount*/
publicintgetCount(){
returncount;
}
publicvoidsetCount(intcount){
this.count=count;
}
publicObjectgetItem(intpos){
returnpos;
}
publiclonggetItemId(intpos){
returnpos;
}
publicViewgetView(intpos,Viewv,ViewGroupp){
TextViewview=newTextView(MainActivity.this);
view.setTextSize(60);
if(items!=null){
view.setText(items.get(pos));
}else{
view.setText(pos);
}
returnview;
}
}
}
完整实例代码点击此处本站下载。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。