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>
相关推荐
实现ListView分页通常需要以下步骤: 1. **创建数据源**:首先,你需要一个可分页的数据源。这通常是一个包含分页信息的ObservableCollection,如PagedCollectionView或自己实现的分页数据集。 2. **设置View**:...
"ListView分页显示上一页和下一页"这一主题,就是讨论如何实现ListView在用户滚动到列表底部时自动加载下一页数据,同时提供上一页的切换功能。 一、分页原理 分页的基本思想是将大量数据分为多个小部分(页)来...
总之,"HeaderBottomListDemo"是一个很好的学习实例,展示了如何在Android中实现ListView的分页加载功能。通过理解和实践这个示例,开发者可以掌握处理大量数据的技巧,提升应用的性能和用户体验。
在ListView分页加载中,我们通常会结合PagerAdapter或FragmentPagerAdapter来创建一个滑动页面的效果,这样用户可以逐页浏览内容,而不是一次性看到所有数据。这两种适配器用于在ViewPager中管理页面,与ListView...
一、ListView分页原理 分页的基本思想是将大量数据分成若干个小部分(每部分称为一页),每次只加载一部分数据到ListView中,当用户滚动到底部时,再加载下一页的数据。这样既能保证界面的流畅性,又能有效利用系统...
"ListView分页显示 加载更多"的功能是优化用户体验的重要手段,它允许用户在滚动到列表底部时动态加载更多的数据,而不是一次性加载所有内容,从而节省内存资源并提高应用性能。 在实现ListView分页加载更多功能时...
本资源提供了一个自定义ListView结合分页功能的实践案例,包括代码实现和数据库操作,对于学习和理解如何在Android应用中实现高效的数据加载和展示具有很高的参考价值。 首先,我们来了解ListView的基础知识。...
分页加载是指在用户滚动列表到底部时,应用程序动态地从服务器获取更多数据并将其添加到已有的ListView中,而不是一次性加载所有数据。这种技术可以减少内存消耗,避免一次性加载大量数据导致的卡顿现象,尤其对于...
在这个"android listview分页查询显示"的Demo中,我们将深入探讨如何实现这个功能,以及如何结合SQLite数据库进行数据管理。 首先,ListView的工作原理是通过Adapter来连接数据源和视图。Adapter负责将数据转化为...
本示例"简单ListView分页Demo"旨在教你如何实现一个具有分页功能的ListView,以展示不同类型的音乐,如流行音乐和古典音乐,并根据类型显示不同数量的条目。我们将探讨以下几个关键知识点: 1. **ListView基础**: ...
ListView分页是Android开发中一个常见且重要的技术,主要用于处理大量数据展示,以提高用户体验和应用性能。在Android中,ListView通常用于显示一系列可滚动的项目列表,而分页则是为了减少内存消耗和提高加载速度,...
### WPF ListView分页实现详解 在Windows Presentation Foundation(WPF)中,`ListView`控件是用于展示数据集合的强大工具。当数据集过大时,为了提高应用性能和用户体验,通常会采用分页技术来控制每次加载的数据...
一、ListView分页 1. 分页原理:分页是为了优化用户体验,避免一次性加载大量数据导致内存占用过高,影响应用性能。通常,我们只加载用户当前能看到的数据,当用户滚动到列表底部时,再动态加载下一页数据。 2. ...
WPF ListView如何分页困扰了我很久,百度搜索的结果几乎得不到满意的结果,而CSDN论坛上流传的资源包貌似是微软提供的例子,但是略显复杂。经过笔者一晚上的摸索,得到了一种比较简单的解决方案,在此贡献给大家。...
本压缩包"安卓listview相关相关-Listview分页加载数据.rar"主要关注的是ListView的分页加载数据这一核心特性。 一、ListView基础 1. ListView的基本结构:ListView由多个View(如TextView、ImageView等)组成的...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表,比如联系人、消息等。然而,如果一次性加载所有数据,不仅会消耗大量内存,也可能导致应用运行缓慢。因此,通常采用分页加载(Pagination)的...
要实现ListView分页,你需要做以下几步: 1. 数据源管理:创建一个适配器(如ArrayAdapter或BaseAdapter),管理当前显示的数据。当需要加载更多数据时,向适配器添加新数据。 2. 监听滚动事件:通过ListView的...
本示例“ListView分页加载及图片缓存显示的实现”着重讲解如何优化ListView的性能,提高用户体验,特别是处理大量图片时。以下是对该主题的详细解释: 1. **ListView分页加载**: 分页加载(Pagination)是一种...
在VB(Visual Basic)开发中,ListView控件是一种常见的组件,用于显示列表形式的数据,如文件、联系人等。在处理大量数据时,为了提高用户体验和应用程序性能,通常需要实现数据分页功能。本篇文章将深入探讨如何在...
在Android开发中,ListView是一种常见的UI组件,用于展示大量数据列表。当数据量过大时,一次性加载所有数据可能会导致性能问题,比如内存消耗过大、应用响应慢等。为了解决这些问题,通常会采用“动态加载数据分页...