Android ListView 实现分页数据显示
1、MiaiActivity 类:主要的Activity类
public class MianActivity extends Activity implements OnScrollListener {
private ListView listView = null;
private int currentPage = 1;
private int lineSize = 25;// 每页显示
private int pageSize = 1;// 总页数
private int lastitem = 0;
private int allrecorders = 0;// 总记录数
private SimpleAdapter adapter = null;
private List<Map<String, Object>> listdata = null;
// 定义在下方显示 信息
private LinearLayout bottomLayout = null;
private TextView loadInfo = null;
//
private android.widget.LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mian);
// 初始化
initWidget();
// 加载显示数据
showAlldata();
// 计算总页数
this.pageSize = (this.allrecorders % lineSize == 0) ? this.allrecorders
/ lineSize : this.allrecorders / lineSize + 1;
}
public void initWidget() {
bottomLayout = new LinearLayout(this);
this.loadInfo = new TextView(this);
this.loadInfo.setText("加载中ING....");
this.loadInfo.setGravity(Gravity.CENTER);
this.loadInfo.setTextColor(Color.BLACK);
this.loadInfo.setTextSize(30);
bottomLayout.addView(loadInfo, layoutParams);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.mian, menu);
return true;
}
// 显示ListView数据
public void showAlldata() {
listView = (ListView) findViewById(R.id.listView1);
ListQueryDAO queryDao = new ListQueryDAO(this);
// 求出总记录数
allrecorders = queryDao.getCountRow();
listdata = queryDao.findData(currentPage, lineSize);
this.adapter = new SimpleAdapter(this, listdata,
R.layout.list_view_layout, DBHelper.LinkanColumns.COLUMNS,
new int[] { R.id.myviewId, R.id.myviewName, R.id.myviewPhone });
listView.addFooterView(bottomLayout);
listView.setAdapter(this.adapter);
listView.setOnScrollListener(this);
}
public void appendData() {
ListQueryDAO queryDao = new ListQueryDAO(this);
List<Map<String, Object>> newdata = queryDao.findData(this.currentPage,
lineSize);
listdata.addAll(newdata);
this.adapter.notifyDataSetChanged();
}
// 监听来自屏幕滚动
@Override
public void onScroll(AbsListView listview, int firstVisiableitem,
int visiableItemCount, int tatalItemCount) {
// TODO Auto-generated method stub
this.lastitem = firstVisiableitem + visiableItemCount - 1;
}
@Override
public void onScrollStateChanged(AbsListView arg0, int scrollstatus) {
// TODO Auto-generated method stub
if (this.lastitem == this.adapter.getCount()
&& this.currentPage < this.pageSize
&& scrollstatus == OnScrollListener.SCROLL_STATE_IDLE) {
this.currentPage++;
this.listView.setSelection(this.lastitem);
this.appendData();
}
}
}
2、SQLite数据库封装类
DBHelper.java类
package com.tsinghua.datasource;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper {
private Context context;
private SQLiteDatabase dbInstance;
private DBCreator dbCreator;
private String tableName="myAddressBook";
public static final int DB_VERSION = 1;
public static final String DB_NAME = "db_addressbook.db";
public static final String TABLE_NAME_LINKMAN = "myAddressBook";
public DBHelper(Context context) {
this.context = context;
}
public static final String CREATE_TABLE = new StringBuffer()
.append("Create table ").append(TABLE_NAME_LINKMAN).append(" (")
.append(LinkanColumns.COLUMN_ID).append(" integer primary key,")
.append(LinkanColumns.COLUMN_NAME).append(" text not null,")
.append(LinkanColumns.COLUMN_PHONE).append(" text )")
.toString();
public static final String QUERY_LINKMAN_TABLE = new StringBuilder()
.append("select * from ").append(TABLE_NAME_LINKMAN)
.toString();
public static final class LinkanColumns {
public static final String COLUMN_ID = "_id";//
public static final String COLUMN_NAME = "name";
public static final String COLUMN_PHONE = "phoneName";
public static final String[] COLUMNS = { COLUMN_ID, COLUMN_NAME,
COLUMN_PHONE };
}
//打开
public void open() {
dbCreator = new DBCreator(context, DBHelper.DB_NAME, null,
DBHelper.DB_VERSION, DBHelper.CREATE_TABLE, tableName);
dbInstance = dbCreator.getWritableDatabase();
}
public void close() {
dbCreator.close();
}
public long insert(ContentValues values) {
return dbInstance.insert(tableName, null, values);
}
public int update(ContentValues values, String whereClause,
String[] whereArgs) {
return dbInstance.update(tableName, values, whereClause, whereArgs);
}
public int delete(String whereClause, String[] whereArgs) {
return dbInstance.delete(tableName, whereClause, whereArgs);
}
public Cursor query(String sql, String[] selectionArgs) {
return dbInstance.rawQuery(sql, selectionArgs);
}
public Cursor query() {
return dbInstance.query(tableName, null, null, null, null, null,
DBHelper.LinkanColumns.COLUMN_NAME);
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
// database Operation 类
private class DBCreator extends SQLiteOpenHelper {
private Context context;
private String createTableSql;
private String tableName;
public DBCreator(Context context, String name, CursorFactory factory,
int version, String createTableSql, String tableName) {
super(context, name, factory, version);
this.context = context;
this.createTableSql = createTableSql;
// this.tableName = tableName;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(createTableSql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + tableName);
onCreate(db);
}
}
}
Dao封装类,ListQueryDAO .java 继承自DBHelper类
/**
*
* @author Administrator 分页查询
*
*/
public class ListQueryDAO extends DBHelper {
public ListQueryDAO(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public long addInfo(Integer id, String _name, String phone) {
open();
ContentValues values = new ContentValues();
values.put(DBHelper.LinkanColumns.COLUMN_ID, id);
values.put(DBHelper.LinkanColumns.COLUMN_NAME, _name);
values.put(DBHelper.LinkanColumns.COLUMN_PHONE, phone);
long id_ = insert(values);
close();
return id_;
}
public Cursor querInfo() {
open();
Cursor cursor = query();
return cursor;
}
/**
* 查询多少条
*
* @return
*/
public int getCountRow() {
open();
int count = 0;
final String sql = new StringBuffer().append(
"select count(_id) from " + DBHelper.TABLE_NAME_LINKMAN + "")
.toString();
Cursor row_cursor = query(sql, null);
for (row_cursor.moveToFirst(); !row_cursor.isAfterLast(); row_cursor
.moveToNext()) {
count = row_cursor.getInt(0);
}
close();
return count;
}
public List<Map<String, Object>> findData(int current, int lineSize) {
List<Map<String, Object>> all = new ArrayList<Map<String, Object>>();
final String sql = new StringBuffer().append("SELECT ")
.append(DBHelper.LinkanColumns.COLUMN_ID).append(" ,")
.append(DBHelper.LinkanColumns.COLUMN_NAME).append(" ,")
.append(DBHelper.LinkanColumns.COLUMN_PHONE).append(" ")
.append(" FROM ").append(DBHelper.TABLE_NAME_LINKMAN).append(" LIMIT ?,?")
.toString();
System.out.println(sql);
String selectArgs[] = new String[] {
String.valueOf((current - 1) * lineSize),
String.valueOf(lineSize) };
open();
Cursor result = query(sql, selectArgs);
for (result.moveToFirst(); !result.isAfterLast(); result.moveToNext()) {
Map<String, Object> maps = new HashMap<String, Object>();
maps.put(DBHelper.LinkanColumns.COLUMN_ID, result.getInt(0));
maps.put(DBHelper.LinkanColumns.COLUMN_NAME, result.getString(1));
maps.put(DBHelper.LinkanColumns.COLUMN_PHONE, result.getString(2));
all.add(maps);
}
return all;
}
}
二、布局类 activity_mian.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mylayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".MianActivity" >
<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
Liew的布局文件 list_view_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/myviewId"
android:layout_width="100px"
android:gravity="center_horizontal"
android:layout_height="wrap_content"
android:textSize="30px"
/>
<TextView
android:id="@+id/myviewName"
android:layout_width="180px"
android:gravity="center_horizontal"
android:layout_height="wrap_content"
android:textSize="30px"
/>
<TextView
android:id="@+id/myviewPhone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30px"
/>
</LinearLayout>
相关推荐
这是一个android listview分页查询显示的demo,使用sqlite数据库,然后每次显示10条,上拉加载更多数据,studio项目
这是一个ListView分页显示的示例 2013.10.27
WPF中ListView分页功能,同时也可以了解WPF的基本应用和ListView的基本使用方法,Binding等方法
Android ListView分页功能源码
android ListView分页 android ListView分页 android ListView分页
ListView的分页
WPF ListView如何分页困扰了我很久,百度搜索的结果几乎得不到满意的结果,而CSDN论坛上流传的资源包貌似是微软提供的例子,但是略显复杂。经过笔者一晚上的摸索,得到了一种比较简单的解决方案,在此贡献给大家。...
android中listview数据分页加载功能实现
wpf 中的ListView分页功能实现,具体源代码。
ListView分页,非常简单的一个例子
android listView 分页加载
android下listview分页加载更多,绝对可用
很好的资源,自己写的listview与分页的综合实例,有代码和数据库。代码通过多次测试,可以正确运行。
这个demo主要介绍了listView的分页功能,实现了加载更多,希望可以帮助需要的同学。
ListView分页显示上一页和下一页,加载数据显示
listView 分页加载 android 动态加载数据
我们在看微博或是到网上商城如淘宝中购物时,每一个商家都会有很多商品,如果把某商家的所有商品都一次性加载过来,会造成手机卡顿,影响用户体验,所以每次加载少量数据,使用分页的形式,分多页加载,会很好的提高...
VB ListView 数据分页处理,vb分页例子
Android高级应用源码-Listview分页加载数据.zip