Android ListView 按钮点击分页显示

 列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器 用来把数据映射到ListView上的中介。

3.数据    具体的将被映射的字符串,图片,或者基本组件。

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。 SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

 

当数据罗列过多的时候,我们需要Listview分页显示,此时怎么办呢

下面一个简单的例子介绍一下

package com.ideasandroid.demo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class listMoreTest extends Activity {
    ListView lv;
    Button btnLeft, btnRight;

     View.OnClickListener cl;

     MoreAdapter ma;

     String[] data = {
             "0","1","2","3","4","5","6","7","8","9","10",
             "11","12","13","14","15","16","17","18","19","20",
             "21","22","23","24","25","26","27","28","29","30",
             "31","32","33","34","35","36","37","38","39","40",
             "41","42","43","44","45","46","47","48","49","50",
             "51","52","53","54","55","56","57","58","59","60",
            "61","62","64","64","65","66","67","68","69","70",
             "71","72","73","74","75","76","77","78","79","80",
             "81","82","83","84","85","86","87","88","89","90",
             "91","92","93","94","95","96","97","98","99","100"
     };

     //用于显示每列5个Item项。
     int VIEW_COUNT = 5;

     //用于显示页号的索引
     int index = 0;
     /** Called when the activity is first created. */

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.listview);

         //加载Listview和2个Button
         initView();

         //设置ListView的Adapter
         ma = new MoreAdapter(this);
         lv.setAdapter(ma);
         //此处是双向绑定吗?

         cl = new Button.OnClickListener(){
             @Override
             public void onClick(View v) {
                 // TODO Auto-generated method stub
                 switch(v.getId()){
                 case R.id.btnLeft:
                     leftView();
                     break;

                 case R.id.btnRight:
                     rightView();
                     break;
                 }
            }

         };
         //添加2个Button的监听事件。
         btnLeft.setOnClickListener(cl);
         btnRight.setOnClickListener(cl);

         //检查2个Button是否是可用的
         checkButton();

     }

     public void initView(){
         lv = (ListView)findViewById(R.id.list);

         btnLeft = (Button)findViewById(R.id.btnLeft);
         btnRight = (Button)findViewById(R.id.btnRight);

     }

     //点击左边的Button,表示向前翻页,索引值要减1.
     public void leftView(){
         index--;

         //刷新ListView里面的数值。
         ma.notifyDataSetChanged();

         //检查Button是否可用。
         checkButton();
     }
   //点击右边的Button,表示向后翻页,索引值要加1.
     public void rightView(){
         index++;

         //刷新ListView里面的数值。
         ma.notifyDataSetChanged();

         //检查Button是否可用。
         checkButton();
     }

     public void checkButton(){
         //索引值小于等于0,表示不能向前翻页了,以经到了第一页了。         //将向前翻页的按钮设为不可用。
         if(index <=0){
             btnLeft.setEnabled(false);
         }
         //值的长度减去前几页的长度,剩下的就是这一页的长度,如果这一页的长度比View_Count小,表示这是最后的一页了,后面在没有了。
         //将向后翻页的按钮设为不可用。
         else if(data.length - index*VIEW_COUNT <= VIEW_COUNT){
             btnRight.setEnabled(false);
         }

         //否则将2个按钮都设为可用的。
         else {
            btnLeft.setEnabled(true);
             btnRight.setEnabled(true);
         }

     }

     //ListView的Adapter,这个是关键的导致可以分页的根本原因。
     public class MoreAdapter extends BaseAdapter {
         Activity activity;
          public MoreAdapter(Activity a){
             activity = a;
         }

         //设置每一页的长度,默认的是View_Count的值。
         @Override
         public int getCount() {
             // TODO Auto-generated method stub
             //return data.length
             //ori表示到目前为止的前几页的总共的个数。
             int ori = VIEW_COUNT * index;

             //值的总个数-前几页的个数就是这一页要显示的个数,如果比默认的值小,说明这是最后一页,只需显示这么多就可以了
             if(data.length - ori < VIEW_COUNT ){
                 return data.length - ori;
             }
             //如果比默认的值还要大,说明一页显示不完,还要用换一页显示,这一页用默认的值显示满就可以了。
            else {
                return VIEW_COUNT;
             }

         }

        @Override
        public Object getItem(int position) {
             // TODO Auto-generated method stub
             return 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
             //return addTestView(position);

             TextView tv = new TextView(activity);
             tv.setGravity(Gravity.CENTER);
             //TextView要显示的是当前的位置+前几页已经显示的位置个数的对应的位置上的值。
             tv.setText(data[position+index*VIEW_COUNT]);
             return tv;

         }
     }
 }

HeaderBottomListDemo_MORE_PAGES_.rar (473.5
KB)

时间: 2024-11-08 18:51:42

Android ListView 按钮点击分页显示的相关文章

Android ListView滑动过程中图片显示重复错乱闪烁的原因及解决方法

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制. 1.原因分析 ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的ite

Android悬浮按钮点击返回顶部FloatingActionButton

先看一下Android悬浮按钮点击回到顶部的效果: FloatingActionButton是Design Support库中提供的一个控件,这个控件可以轻松实现悬浮按钮的效果 首先,要在项目中使用这个悬浮按钮就要先把design这个包导入项目 gradle中加入依赖 compile 'com.android.support:design:25.0.0' 接下来就是在xml中使用: 我这里是放置一个listView模拟返回顶部 <?xml version="1.0" encodi

Android ListView滑动过程中图片显示重复错位闪烁问题解决

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制.1.原因分析ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的item,

数据不显示-android ListView的item数据的显示问题

问题描述 android ListView的item数据的显示问题 获取到的应该显示的数据都可以打印出来,但是界面上只有时间显示了出来,其他数据都 没有显示出来,查看布局也没发现哪儿的问题,希望各位帮帮忙喽! item的数据未显示部分布局如下: android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/rellay0&

Android 各种按钮点击效果以及兼容性问题总结

概述  点击效果在安卓的原生开发中无处不见,主要是为了对用户的操作在视觉上进行反馈.这个反馈很平常也很重要.而安卓5.0开始引入的全新设计Material Design真的超赞!特别是触摸反馈的波纹效果,可惜这个波纹效果只支持5.0及以上的版本,应该是出于性能的考虑!坑爹啊!  但是既然5.0以上可以用酷炫的点击效果,那就不能浪费要用起来,这篇博客前面先讲下Button和ImageView点击效果的基本实现,然后再讲下我个人如何处理兼容Material 设计效果 按钮点击效果基本实现 Butto

Android实现按钮点击效果

1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="点击变色" android:background="@drawable/btn_st" android:gravity="center&

android 防止按钮连续点击的方法(Button,ImageButton等)

防止按钮连续点击 其实实现很简单  共通方法 public class Utils { private static long lastClickTime; public static boolean isFastDoubleClick() { long time = System.currentTimeMillis(); if ( time - lastClickTime < 500) { return true; } lastClickTime = time; return false; }

Android listView滑动刷新代码(分页功能)

三个代码都是从网上下载来的,但是导入到eclipse里面以后,中文注释出现乱码,所以我文章里面的注释有很多可能是自己添加的,如有不准确的地方,敬请谅解和留言告知! 这个例子是listview一开始显示10个,下拉listview,就会更新添加列表,知道第50个.        首先,布局文件是非常简单,可以直接看代码,首先,先看下自定义的一个简单的Adapter: [java] view plaincopy class listViewAdapter extends BaseAdapter { 

android listview 设置点击效果selector

在此Item项布局文件中添加android:background="@drawable/list_selector" list_selector.xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android