代码:
package com.qianfeng.sqlitedivpage;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
private ListView lv;
private RelativeLayout rl1;
private SQLiteDatabase db ;
private List<Map<String, Object>> list;
private int totalNum;//总的数据条数
private int pageSize =10 ;//每页显示的数据
private int totalPage ;//总的页数
private int currentPage = 1;//当前页数
private boolean isBottom =false;
SimpleAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
rl1 = (RelativeLayout) findViewById(R.id.rl1);
String path = Environment.getExternalStorageDirectory().getAbsolutePath()
+File.separator+"Download"+File.separator+"info.db";
db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
Cursor cursor = db.rawQuery("Select * from person", null);
totalNum = cursor.getCount();//得到数据的总条数
totalPage =(int) Math.ceil(totalNum/(float)pageSize);//通过计算得到总的页数
if(1== currentPage){
list = getData(currentPage);
}
adapter = new SimpleAdapter(
MainActivity.this,
list,
R.layout.item,
new String[]{"_id","name"},
new int[]{R.id.textView1,R.id.textView2});
lv.setAdapter(adapter);
lv.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if(isBottom&&(OnScrollListener.SCROLL_STATE_IDLE ==scrollState)){
if(currentPage<totalPage){
rl1.setVisibility(View.VISIBLE);
}else{
rl1.setVisibility(View.GONE);
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
isBottom =((firstVisibleItem+visibleItemCount)==totalItemCount);
}
});
}
public void click(View v){
switch (v.getId()) {
case R.id.rl1:
//当前页 是否小与总的页数
if(currentPage<totalPage){
currentPage++;
list.addAll(getData(currentPage));
adapter.notifyDataSetChanged();
}
rl1.setVisibility(View.GONE);
break;
default:
break;
}
}
/**
* 获取当前页的database数据
* @param currentPage
* @return
*/
public List<Map<String, Object>> getData(int currentPage){
int index = (currentPage-1)*pageSize;//当前页 起始的下标 (2-1)*10
String sql = "Select * from person limit ?,?";
Cursor cursor = db.rawQuery(sql, new String []{(index)+"",pageSize+""});
return getCursorTolist(cursor);
}
/**
* 根据Cursor对象转换成list集合
* @return
*/
public List<Map<String, Object>> getCursorTolist(Cursor c){
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
String []coloms = c.getColumnNames();//[_id,name]
//c.moveToFirst();
while(c.moveToNext()){
Map<String, Object> map = new HashMap<String, Object>();
for(int i=0;i<coloms.length;i++){
String key = coloms[i];
Object value=null;
int type = c.getType(i);//得到数据的类型
switch (type) {
case Cursor.FIELD_TYPE_BLOB:
value =c.getBlob(i);//根据下标i得到values
break;
case Cursor.FIELD_TYPE_FLOAT:
value= c.getFloat(i);
break;
case Cursor.FIELD_TYPE_INTEGER:
value= c.getInt(i);
break;
case Cursor.FIELD_TYPE_STRING:
value= c.getString(i);
break;
default:
break;
}
map.put(key, value);
}
list.add(map);
}
return list;
}
}