`
jonsamwang
  • 浏览: 36610 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

ListView分页(一)

    博客分类:
  • Java
 
阅读更多

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>

 

 

 

 

 

 

分享到:
评论

相关推荐

    WPF中ListView分页

    实现ListView分页通常需要以下步骤: 1. **创建数据源**:首先,你需要一个可分页的数据源。这通常是一个包含分页信息的ObservableCollection,如PagedCollectionView或自己实现的分页数据集。 2. **设置View**:...

    这是一个ListView分页显示的示例

    总之,"HeaderBottomListDemo"是一个很好的学习实例,展示了如何在Android中实现ListView的分页加载功能。通过理解和实践这个示例,开发者可以掌握处理大量数据的技巧,提升应用的性能和用户体验。

    Android ListView分页功能源码

    在ListView分页加载中,我们通常会结合PagerAdapter或FragmentPagerAdapter来创建一个滑动页面的效果,这样用户可以逐页浏览内容,而不是一次性看到所有数据。这两种适配器用于在ViewPager中管理页面,与ListView...

    Android_ListView分页

    一、ListView分页原理 分页的基本思想是将大量数据分成若干个小部分(每部分称为一页),每次只加载一部分数据到ListView中,当用户滚动到底部时,再加载下一页的数据。这样既能保证界面的流畅性,又能有效利用系统...

    listView分页显示 加载更多

    "ListView分页显示 加载更多"的功能是优化用户体验的重要手段,它允许用户在滚动到列表底部时动态加载更多的数据,而不是一次性加载所有内容,从而节省内存资源并提高应用性能。 在实现ListView分页加载更多功能时...

    使用listview分页显示数据

    本资源提供了一个自定义ListView结合分页功能的实践案例,包括代码实现和数据库操作,对于学习和理解如何在Android应用中实现高效的数据加载和展示具有很高的参考价值。 首先,我们来了解ListView的基础知识。...

    listview分页加载

    分页加载是指在用户滚动列表到底部时,应用程序动态地从服务器获取更多数据并将其添加到已有的ListView中,而不是一次性加载所有数据。这种技术可以减少内存消耗,避免一次性加载大量数据导致的卡顿现象,尤其对于...

    android listview分页查询显示

    在这个"android listview分页查询显示"的Demo中,我们将深入探讨如何实现这个功能,以及如何结合SQLite数据库进行数据管理。 首先,ListView的工作原理是通过Adapter来连接数据源和视图。Adapter负责将数据转化为...

    简单ListView分页Demo

    本示例"简单ListView分页Demo"旨在教你如何实现一个具有分页功能的ListView,以展示不同类型的音乐,如流行音乐和古典音乐,并根据类型显示不同数量的条目。我们将探讨以下几个关键知识点: 1. **ListView基础**: ...

    ListView分页

    ListView分页是Android开发中一个常见且重要的技术,主要用于处理大量数据展示,以提高用户体验和应用性能。在Android中,ListView通常用于显示一系列可滚动的项目列表,而分页则是为了减少内存消耗和提高加载速度,...

    WPF ListView分页实现.doc

    ### WPF ListView分页实现详解 在Windows Presentation Foundation(WPF)中,`ListView`控件是用于展示数据集合的强大工具。当数据集过大时,为了提高应用性能和用户体验,通常会采用分页技术来控制每次加载的数据...

    简单的listview分页

    一、ListView分页 1. 分页原理:分页是为了优化用户体验,避免一次性加载大量数据导致内存占用过高,影响应用性能。通常,我们只加载用户当前能看到的数据,当用户滚动到列表底部时,再动态加载下一页数据。 2. ...

    很简单的WPF ListView分页技术

    WPF ListView如何分页困扰了我很久,百度搜索的结果几乎得不到满意的结果,而CSDN论坛上流传的资源包貌似是微软提供的例子,但是略显复杂。经过笔者一晚上的摸索,得到了一种比较简单的解决方案,在此贡献给大家。...

    安卓listview相关相关-Listview分页加载数据.rar

    本压缩包"安卓listview相关相关-Listview分页加载数据.rar"主要关注的是ListView的分页加载数据这一核心特性。 一、ListView基础 1. ListView的基本结构:ListView由多个View(如TextView、ImageView等)组成的...

    Android中Listview分页显示

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表,比如联系人、消息等。然而,如果一次性加载所有数据,不仅会消耗大量内存,也可能导致应用运行缓慢。因此,通常采用分页加载(Pagination)的...

    Android listview分页

    要实现ListView分页,你需要做以下几步: 1. 数据源管理:创建一个适配器(如ArrayAdapter或BaseAdapter),管理当前显示的数据。当需要加载更多数据时,向适配器添加新数据。 2. 监听滚动事件:通过ListView的...

    ListView分页显示上一页和下一页

    "ListView分页显示上一页和下一页"这一主题,就是讨论如何实现ListView在用户滚动到列表底部时自动加载下一页数据,同时提供上一页的切换功能。 一、分页原理 分页的基本思想是将大量数据分为多个小部分(页)来...

    ListView分页加载及图片缓存显示的实现

    本示例“ListView分页加载及图片缓存显示的实现”着重讲解如何优化ListView的性能,提高用户体验,特别是处理大量图片时。以下是对该主题的详细解释: 1. **ListView分页加载**: 分页加载(Pagination)是一种...

    VB ListView 数据分页处理

    在VB(Visual Basic)开发中,ListView控件是一种常见的组件,用于显示列表形式的数据,如文件、联系人等。在处理大量数据时,为了提高用户体验和应用程序性能,通常需要实现数据分页功能。本篇文章将深入探讨如何在...

    ListView动态加载数据分页

    在Android开发中,ListView是一种常见的UI组件,用于展示大量数据列表。当数据量过大时,一次性加载所有数据可能会导致性能问题,比如内存消耗过大、应用响应慢等。为了解决这些问题,通常会采用“动态加载数据分页...

Global site tag (gtag.js) - Google Analytics