iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >android实现listview分页的方法
  • 829
分享到

android实现listview分页的方法

方法listviewAndroid 2022-06-06 10:06:36 829人浏览 泡泡鱼
摘要

本文实例讲述了Android实现listview分页的方法。分享给大家供大家参考。具体分析如下: 最近做了下listview的分页,跟WEB上的分页是一个意思,需要那几个分页参

本文实例讲述了Android实现listview分页的方法。分享给大家供大家参考。具体分析如下:

最近做了下listview的分页,跟WEB上的分页是一个意思,需要那几个分页参数,不同的是sqlite中分页的查询语句,简便的方法需要用Limit,Offset关键字,前者是查询每页展示的记录数,后者是越过多少记录数,说得明白点就是忽略前面多少行记录之后,取多少行记录

我分页采用了一个重要的类Page,通过封装Page类,做为参数传递进来,返回出去也是个Page对象


import java.util.Collections; 
import java.util.List; 
 
public class Page<T> { 
  //-- 公共变量 --// 
  public static final String ASC = "asc"; 
  public static final String DESC = "desc"; 
  //-- 分页参数 --// 
  protected int pageNo = 0;// 当前页号<跟取数据的方式有关系> 
  protected int pageSize = 1;// 每页显示的记录数 
  protected String orderBy = null; 
  protected String order = null; 
  protected boolean autoCount = true; 
  //-- 返回结果 --// 
  protected List<T> result = Collections.emptyList(); 
  protected long totalCount = -1;// 总记录数 
  //-- 构造函数 --// 
  public Page() { 
  } 
  public Page(final int pageSize) { 
    setPageSize(pageSize); 
  } 
  public Page(final int pageSize, final boolean autoCount) { 
    setPageSize(pageSize); 
    setAutoCount(autoCount); 
  } 
  //-- 访问查询参数函数 --// 
   
  public int getPageNo() { 
    return pageNo; 
  } 
   
  public void setPageNo(final int pageNo) { 
    this.pageNo = pageNo; 
    if (pageNo < 0) { 
      this.pageNo = 0; 
    } 
  } 
   
  public int getPageSize() { 
    return pageSize; 
  } 
   
  public void setPageSize(final int pageSize) { 
    this.pageSize = pageSize; 
    if (pageSize < 0) { 
      this.pageSize = 0; 
    } 
  } 
   
  public int getFirst() { 
    return (pageNo * pageSize) + 1; 
  } 
   
  public String getOrderBy() { 
    return orderBy; 
  } 
   
  public void setOrderBy(final String orderBy) { 
    this.orderBy = orderBy; 
  } 
   
  public String getOrder() { 
    return order; 
  } 
   
  public void setOrder(String order) { 
    this.order = order; 
  } 
   
  public boolean isAutoCount() { 
    return autoCount; 
  } 
   
  public void setAutoCount(final boolean autoCount) { 
    this.autoCount = autoCount; 
  } 
  //-- 访问查询结果函数 --// 
   
  public List<T> getResult() { 
    return result; 
  } 
   
  public void setResult(final List<T> result) { 
    this.result = result; 
  } 
   
  public long getTotalCount() { 
    return totalCount; 
  } 
   
  public void setTotalCount(final long totalCount) { 
    this.totalCount = totalCount; 
  } 
   
  public long getTotalPages() { 
    if (totalCount < 0) 
      return -1; 
    long count = totalCount / pageSize; 
    if (totalCount % pageSize > 0) { 
      count++; 
    } 
    return count; 
  } 
   
  public boolean isHasNext() { 
    return (pageNo + 1 < getTotalPages()); 
  } 
   
  public int getNextPage() { 
    if (isHasNext()) 
      return pageNo + 1; 
    else 
      return pageNo; 
  } 
   
  public boolean isHasPre() { 
    return (pageNo - 1 >= 0); 
  } 
   
  public int getPrePage() { 
    if (isHasPre()) 
      return pageNo - 1; 
    else 
      return pageNo; 
  } 
}

下面是封装的POJO对象,界面listview的item展示就是靠它


public class Record { 
  private Integer rId; 
  private String fromUser; 
  private String toUser; 
  private String content; 
  private String rTime; 
  private Integer isReaded; 
  public Integer getrId() { 
    return rId; 
  } 
  public void setrId(Integer rId) { 
    this.rId = rId; 
  } 
  public String getFromUser() { 
    return fromUser; 
  } 
  public void setFromUser(String fromUser) { 
    this.fromUser = fromUser; 
  } 
  public String getToUser() { 
    return toUser; 
  } 
  public void setToUser(String toUser) { 
    this.toUser = toUser; 
  } 
  public String getContent() { 
    return content; 
  } 
  public void setContent(String content) { 
    this.content = content; 
  } 
  public String getrTime() { 
    return rTime; 
  } 
  public void setrTime(String rTime) { 
    this.rTime = rTime; 
  } 
  public Integer getIsReaded() { 
    return isReaded; 
  } 
  public void setIsReaded(Integer isReaded) { 
    this.isReaded = isReaded; 
  }
}

好吧,来看下DAO类里的重要方法同样是Page对象,在DAO类里做的操作就是对总记录数和结果list进行赋值


public Page<Record> getRecordPage(Page<Record> page, String loginName, 
      String contactName) { 
    int pageSize = page.getPageSize(); 
    int pageNo = page.getPageNo(); 
    String sql = "select * from " 
        + ContactsManagerDbAdapter.TABLENAME_RECORD 
        + " where (fromUser = ? and toUser = ?) or (fromUser = ? and toUser = ?)" 
        + " Limit " + String.valueOf(pageSize) + " Offset " 
        + String.valueOf(pageNo * pageSize); 
    String[] selectionArgs = { loginName, contactName, contactName, 
        loginName }; 
    Cursor cursor = mSQLiteDatabaseWritable.rawQuery(sql, selectionArgs); 
    List<Record> result = new ArrayList<Record>(); 
    for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){ 
      Record record = new Record(); 
      record.setrId(cursor.getInt(0)); 
      record.setFromUser(cursor.getString(1)); 
      record.setToUser(cursor.getString(2)); 
      record.setContent(cursor.getString(3)); 
      record.setrTime(cursor.getString(4)); 
      record.setIsReaded(cursor.getInt(5)); 
      result.add(record); 
    } 
    page.setTotalCount(getRowCount(loginName, contactName)); 
    page.setResult(result); 
    cursor.close(); 
    return page; 
} 
 
public int getRowCount(String loginName, String contactName){ 
    String sql = "select * from " 
      + ContactsManagerDbAdapter.TABLENAME_RECORD 
      + " where (fromUser = ? and toUser = ?) or (fromUser = ? and toUser = ?)"; 
    String[] selectionArgs = { loginName, contactName, contactName,
        loginName }; 
    Cursor cursor = mSQLiteDatabaseWritable.rawQuery(sql, selectionArgs); 
    int count = cursor.getCount(); 
    cursor.close(); 
    return count; 
} 

关于listview的展示和自定义适配器,在此不提起,总之界面上上一页和下一页按钮的点击事件需要刷新listview


public class ChatHistory extends Activity { 
  ListView historyView; 
  Button prevPageBtn; 
  Button nextPageBtn; 
  TextView historyPageTv; 
  Button backChatsHistoryBtn; 
  Button deleteHistoryBtn; 
  List<Record> historyRecordList;  
  Page<Record> page; 
  String loginName; 
  String contactName; 
  ChatHistoryService chatHistoryService; 
  ContactsManagerDbAdapter dbAdapter; 
  private BaseAdapter adapter; 
  private static final int STATUS_CHANGE = 0; 
  private Handler mHandler; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.chats_history); 
    historyView = (ListView) findViewById(android.R.id.list); 
    prevPageBtn = (Button) findViewById(R.id.chat_prev_page); 
    nextPageBtn = (Button) findViewById(R.id.chat_next_page); 
    historyPageTv = (TextView) findViewById(R.id.history_page); 
    backChatsHistoryBtn = (Button) findViewById(R.id.back_chats_history); 
    deleteHistoryBtn = (Button) findViewById(R.id.delete_history); 
    SharedPreferences sharedata = ChatHistory.this.getSharedPreferences("data", 0); 
    loginName = sharedata.getString("loginName", ""); 
    contactName = getIntent().getStringExtra("contactName"); 
    dbAdapter = new ContactsManagerDbAdapter(getApplicationContext()); 
    dbAdapter.open(); 
    chatHistoryService = new ChatHistoryService(ChatHistory.this);
    page = new Page<Record>(); 
    page.setPageSize(8); 
    page = chatHistoryService.getHistoryPage(page, loginName, contactName, dbAdapter); 
    historyRecordList = page.getResult(); 
    updateTextView(); 
    prevPageBtn.setOnClickListener(prevPageButtonListener); 
    nextPageBtn.setOnClickListener(nextPageButtonListener); 
    backChatsHistoryBtn.setOnClickListener(backButtonListener); 
    deleteHistoryBtn.setOnClickListener(deleteHistoryButtonListener); 
    adapter = new HistoryListAdapter(ChatHistory.this); 
    historyView.setAdapter(adapter); 
    mHandler = new Handler(){  
       public void handleMessage(Message msg) { 
          switch(msg.what){ 
          case STATUS_CHANGE: 
            // 处理UI更新等操作 
            updateUI(); 
          } 
       }; 
    }; 
  } 
  private void updateUI() { 
    //详细的更新 
    adapter.notifyDataSetChanged();// 更新ListView 
    updateTextView(); 
  } 
   
  private void updateTextView(){    
    if(historyRecordList.size() == 0){ 
      historyPageTv.setText(0 + "/" + 0); 
    } else{ 
      historyPageTv.setText(page.getPageNo() + 1 + "/" + page.getTotalPages()); 
    } 
  } 
  public class HistoryListAdapter extends BaseAdapter{ 
    private class RecentViewHolder { 
      TextView sender_context; 
      TextView rTime; 
    } 
    Context context; 
    LayoutInflater mInflater; 
    public HistoryListAdapter(Context context){ 
      this.context = context; 
      mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    @Override 
    public int getCount() { 
      // TODO Auto-generated method stub 
      return historyRecordList.size(); 
    } 
    @Override 
    public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return historyRecordList.get(position); 
    } 
    @Override 
    public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      RecentViewHolder holder; 
      if (convertView == null) { 
        convertView = mInflater.inflate(R.layout.message_layout, null); 
        holder = new RecentViewHolder(); 
        holder.sender_context = (TextView) convertView 
            .findViewById(R.id.message_view_sender_content);
        holder.rTime = (TextView) convertView 
            .findViewById(R.id.message_view_timestamp); 
        convertView.setTag(holder); 
      } else { 
        holder = (RecentViewHolder) convertView.getTag(); 
      } 
      Record record = historyRecordList.get(position); 
      if (record != null) { 
        holder.sender_context.setText(record.getFromUser() + ":" + record.getContent()); 
        holder.rTime.setText(record.getrTime()); 
      } 
      return convertView; 
    } 
  } 
   
  OnClickListener prevPageButtonListener = new OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(page.isHasPre()){ 
        page.setPageNo(page.getPageNo() - 1); 
        historyRecordList = chatHistoryService.getHistoryPage(page, loginName, contactName, dbAdapter).getResult(); 
        Message msg = new Message(); 
        msg.what = STATUS_CHANGE; 
        mHandler.sendMessage(msg);// 向Handler发送消息,更新UI 
      } 
    } 
  }; 
   
  OnClickListener nextPageButtonListener = new OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(page.isHasNext()){ 
        page.setPageNo(page.getPageNo() + 1); 
        historyRecordList = chatHistoryService.getHistoryPage(page, loginName, contactName, dbAdapter).getResult(); 
        Message msg = new Message(); 
        msg.what = STATUS_CHANGE; 
        mHandler.sendMessage(msg);// 向Handler发送消息,更新UI 
      } 
    } 
  }; 
   
  OnClickListener deleteHistoryButtonListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
      // TODO Auto-generated method stub      
    } 
  }; 
   
  OnClickListener backButtonListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
      // TODO Auto-generated method stub 
      // 返回到聊天界面 
      finish(); 
      dbAdapter.close(); 
    } 
  }; 
  @Override 
  public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // 按下键盘上返回按钮 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
      finish(); 
      dbAdapter.close(); 
      return true; 
    } else { 
      return super.onKeyDown(keyCode, event); 
    }
  }
}

上一页,下一页所做的操作也就是在判断是否有上一页和下一页的情况下对页号pageNo的加减操作
最后写上ChatHistoryService.java总觉得是多余的


public class ChatHistoryService { 
  Context context; 
  public ChatHistoryService(Context context) { 
    this.context = context; 
  } 
  public Page<Record> getHistoryPage(Page<Record> page, String loginName, 
      String contactName, ContactsManagerDbAdapter dbAdapter) { 
    RecordDao recordDao = new RecordDao(dbAdapter); 
    return recordDao.getRecordPage(page, loginName, contactName); 
  } 
  public int deleteHistory(String loginName, 
      String contactName, ContactsManagerDbAdapter dbAdapter){ 
    RecordDao recordDao = new RecordDao(dbAdapter); 
    return recordDao.deleteHistoryRecord(loginName, contactName); 
  } 
} 

顺带放上XML布局文件吧
chats_history.xml


<?xml version="1.0" encoding="UTF-8"?> 
<!-- 与好友聊天窗口.xml --> 
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
  android:orientation="vertical" android:layout_width="fill_parent" 
  android:layout_height="fill_parent" android:background="@color/white"> 
  <ListView android:id="@android:id/list" android:layout_width="fill_parent" 
    android:layout_height="200dip" android:layout_weight="1" 
    android:transcriptMode="nORMal" android:fadingEdge="none" 
    android:padding="4px" android:fastScrollEnabled="true" 
    android:smoothScrollbar="false" 
    android:focusable="true" android:dividerHeight="0dip" 
    android:cacheColorHint="#00000000" android:divider="@drawable/divider" /> 
  <!-- 引用聊天内容.xml --> 
  <LinearLayout android:layout_width="fill_parent" 
    android:layout_height="50.0dip" android:orientation="horizontal" 
    android:background="#ccc" android:paddingLeft="3Dip" 
    android:paddingTop="3dip"> 
    <Button android:id="@+id/chat_prev_page" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:background="@drawable/chat_prev_page" /> 
    <TextView android:id="@+id/history_page" android:layout_width="30.0dip" 
      android:layout_height="25.0dip" android:gravity="center" 
      android:text="1/1"/> 
    <Button android:id="@+id/chat_next_page" android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:background="@drawable/chat_next_page" /> 
    <Button android:id="@+id/delete_history" android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:background="@drawable/delete_history_button" /> 
    <Button android:id="@+id/export_history" android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:background="@drawable/export_history_button" /> 
    <Button android:id="@+id/back_chats_history" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"  
      android:background="@drawable/back_btn"/> 
  </LinearLayout> 
</LinearLayout>

 message_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="wrap_content" 
 android:orientation="vertical" 
 > 
 <!-- android:background="@drawable/item_style" --> 
  <TextView android:id="@+id/message_view_sender_content" 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:autoLink="all" /> 
  <TextView android:id="@+id/message_view_timestamp" 
    android:layout_alignParentRight="true" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:layout_below="@+id/message_view_message" 
    android:layout_gravity="right" /> 
</LinearLayout> 

最后来看看效果吧,别欺负我没贴上数据库建表语句,看下我的POJO类就知道我数据库表怎么建的

希望本文所述对大家的Android程序设计有所帮助。

您可能感兴趣的文章:Android滑动动态分页实现方法Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)Android App中使用ViewPager实现滑动分页的要点解析Android中实现多行、水平滚动的分页的Gridview实例源码Android之ListView分页加载数据功能实现代码Android实现ListView分页自动加载数据的方法Android提高之SQLite分页读取实现方法Android实现简单的分页效果Android ListView分页功能实现方法Android开发中滑动分页功能实例详解


--结束END--

本文标题: android实现listview分页的方法

本文链接: https://www.lsjlt.com/news/26727.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现ListView分页加载数据
    本文实例为大家分享了ListView分页加载数据的具体代码,供大家参考,具体内容如下 FenyeActivity package com.example.myapplicatio...
    99+
    2024-04-02
  • Android怎么实现ListView分页加载数据
    本篇内容介绍了“Android怎么实现ListView分页加载数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!FenyeActivityp...
    99+
    2023-06-25
  • Android ListView实现ImageLoader图片加载的方法
    本文实例讲述了Android ListView实现ImageLoader图片加载的方法。分享给大家供大家参考,具体如下:最近一直忙着做项目,今天也是忙里偷闲,想写篇博客来巩固下之前在应用中所用的知识。之前我们可能会也会肯定遇到了图片的异步加...
    99+
    2023-05-30
    android listview imageloader
  • 使用listview分页的方法有哪些
    1. 基于分页库的实现:可以使用第三方的分页库来实现listview的分页,例如Android Paging Library、Eas...
    99+
    2023-06-14
    listview分页
  • ListView中实现部分刷新的两种方法
    在ListView中实现部分刷新的两种方法如下:1. 使用notifyDataSetChanged()方法刷新整个ListView:...
    99+
    2023-09-20
    ListView
  • WPF Listview排序及分页怎么实现
    在WPF中,要实现ListView的排序和分页功能,可以按照以下步骤进行操作: 添加ListView控件到XAML文件中: ...
    99+
    2023-10-22
    WPF Listview
  • 如何在Android应用中利用ListView实现一个分页功能
    今天就跟大家聊聊有关如何在Android应用中利用ListView实现一个分页功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android ListView分页简单实现分页,开发...
    99+
    2023-05-31
    android listview roi
  • Struts2分页的实现方法
    本篇内容主要讲解“Struts2分页的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Struts2分页的实现方法”吧!1.介绍(1)Struts2相当于是servlet,和servelt...
    99+
    2023-06-17
  • Android ListView中headerview的动态显示和隐藏的实现方法
    Android ListView中headerview的动态显示和隐藏的实现方法1.动态设置headerview的方法动态设置headerview有两个思路。方法一将header的布局写在list item的布局文件中,在adapter中通...
    99+
    2023-05-30
    android listview headerview
  • edittext + listview 实现搜索listview中的内容方法(推荐)
    主要原理:是在主界面有两个空间,一个是EditText,一个是ListView,ListView是放在EditText下面的,然后自定义建立一个adapter适配器,这个适配器要继承Filterable这个接口,并实现这个接口的两个方法,一...
    99+
    2023-05-31
    搜索 listview edittext
  • Android开发中利用ListView怎么实现一个分页加载功能
    这期内容当中小编将会给大家带来有关Android开发中利用ListView怎么实现一个分页加载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体如下:package eoe.listview;impo...
    99+
    2023-05-31
    android 分页加载 listview
  • MySQL实现分页查询的方法
    这篇文章主要介绍MySQL实现分页查询的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL中实现分页查询:在数据量较小的情况下可使用limit查询来实现分页查询,在数据量大...
    99+
    2024-04-02
  • AJAX分页效果的实现方法
    这篇文章主要为大家展示了“AJAX分页效果的实现方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AJAX分页效果的实现方法”这篇文章吧。最近写一个给用户组添加...
    99+
    2024-04-02
  • Android中ListView的使用方法有哪些
    在Android中,可以使用以下几种方法来使用ListView:1. 使用ArrayAdapter:可以使用ArrayAdapter...
    99+
    2023-08-16
    Android ListView
  • Android之ListView的使用方法有哪些
    在Android中,有以下几种常见的ListView的使用方法:1. 使用ArrayAdapter:通过创建一个ArrayAdapt...
    99+
    2023-08-12
    Android ListView
  • Android ListView列表优化的方法详解
    1. 使用ViewHolder模式:该模式可以减少findViewById的调用次数。在getView()方法中,通过ViewHol...
    99+
    2023-08-14
    Android
  • Android如何实现ListView的点击变色
    这篇文章将为大家详细讲解有关Android如何实现ListView的点击变色,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android 实现ListView的点击变色的实例我做了一个音乐播放器,其中用L...
    99+
    2023-05-30
    android listview
  • Android ListView列表优化的方法有哪些
    优化Android ListView列表的方法有以下几种:1. 使用ViewHolder模式:在getView()方法中使用View...
    99+
    2023-08-14
    Android ListView
  • javascript动态分页的实现方法实例
    之前分页都是使用框架给出的分页类来实现分页,当然,体验可能不是那么好。 这次在写YII2.0框架的后台管理系统的小例子的时候,我这也尝试了一下前后分离,用ajax来实现分页跳转。 那...
    99+
    2024-04-02
  • SQLServer实现分页方法介绍
    一、创建测试表 CREATE TABLE [dbo].[Student]( [id] [int] NOT NULL, [name] [nvarchar](5...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作