listview实现上一页下一页

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

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

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

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

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

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

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

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

Java代码 复制代码 收藏代码
  1. packagecom.ideasandroid.demo;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.Gravity;
  5. importandroid.view.View;
  6. importandroid.view.ViewGroup;
  7. importandroid.widget.BaseAdapter;
  8. importandroid.widget.Button;
  9. importandroid.widget.ListView;
  10. importandroid.widget.TextView;
  11. publicclasslistMoreTestextendsActivity{
  12. ListViewlv;
  13. ButtonbtnLeft,btnRight;
  14. View.OnClickListenercl;
  15. MoreAdapterma;
  16. String[]data={
  17. "0","1","2","3","4","5","6","7","8","9","10",
  18. "11","12","13","14","15","16","17","18","19","20",
  19. "21","22","23","24","25","26","27","28","29","30",
  20. "31","32","33","34","35","36","37","38","39","40",
  21. "41","42","43","44","45","46","47","48","49","50",
  22. "51","52","53","54","55","56","57","58","59","60",
  23. "61","62","64","64","65","66","67","68","69","70",
  24. "71","72","73","74","75","76","77","78","79","80",
  25. "81","82","83","84","85","86","87","88","89","90",
  26. "91","92","93","94","95","96","97","98","99","100"
  27. };
  28. //用于显示每列5个Item项。
  29. intVIEW_COUNT=5;
  30. //用于显示页号的索引
  31. intindex=0;
  32. /**Calledwhentheactivityisfirstcreated.*/
  33. @Override
  34. publicvoidonCreate(BundlesavedInstanceState){
  35. super.onCreate(savedInstanceState);
  36. setContentView(R.layout.listview);
  37. //加载Listview和2个Button
  38. initView();
  39. //设置ListView的Adapter
  40. ma=newMoreAdapter(this);
  41. lv.setAdapter(ma);
  42. //此处是双向绑定吗?
  43. cl=newButton.OnClickListener(){
  44. @Override
  45. publicvoidonClick(Viewv){
  46. //TODOAuto-generatedmethodstub
  47. switch(v.getId()){
  48. caseR.id.btnLeft:
  49. leftView();
  50. break;
  51. caseR.id.btnRight:
  52. rightView();
  53. break;
  54. }
  55. }
  56. };
  57. //添加2个Button的监听事件。
  58. btnLeft.setOnClickListener(cl);
  59. btnRight.setOnClickListener(cl);
  60. //检查2个Button是否是可用的
  61. checkButton();
  62. }
  63. publicvoidinitView(){
  64. lv=(ListView)findViewById(R.id.list);
  65. btnLeft=(Button)findViewById(R.id.btnLeft);
  66. btnRight=(Button)findViewById(R.id.btnRight);
  67. }
  68. //点击左边的Button,表示向前翻页,索引值要减1.
  69. publicvoidleftView(){
  70. index--;
  71. //刷新ListView里面的数值。
  72. ma.notifyDataSetChanged();
  73. //检查Button是否可用。
  74. checkButton();
  75. }
  76. //点击右边的Button,表示向后翻页,索引值要加1.
  77. publicvoidrightView(){
  78. index++;
  79. //刷新ListView里面的数值。
  80. ma.notifyDataSetChanged();
  81. //检查Button是否可用。
  82. checkButton();
  83. }
  84. publicvoidcheckButton(){
  85. //索引值小于等于0,表示不能向前翻页了,以经到了第一页了。//将向前翻页的按钮设为不可用。
  86. if(index<=0){
  87. btnLeft.setEnabled(false);
  88. }
  89. //值的长度减去前几页的长度,剩下的就是这一页的长度,如果这一页的长度比View_Count小,表示这是最后的一页了,后面在没有了。
  90. //将向后翻页的按钮设为不可用。
  91. elseif(data.length-index*VIEW_COUNT<=VIEW_COUNT){
  92. btnRight.setEnabled(false);
  93. }
  94. //否则将2个按钮都设为可用的。
  95. else{
  96. btnLeft.setEnabled(true);
  97. btnRight.setEnabled(true);
  98. }
  99. }
  100. //ListView的Adapter,这个是关键的导致可以分页的根本原因。
  101. publicclassMoreAdapterextendsBaseAdapter{
  102. Activityactivity;
  103. publicMoreAdapter(Activitya){
  104. activity=a;
  105. }
  106. //设置每一页的长度,默认的是View_Count的值。
  107. @Override
  108. publicintgetCount(){
  109. //TODOAuto-generatedmethodstub
  110. //returndata.length
  111. //ori表示到目前为止的前几页的总共的个数。
  112. intori=VIEW_COUNT*index;
  113. //值的总个数-前几页的个数就是这一页要显示的个数,如果比默认的值小,说明这是最后一页,只需显示这么多就可以了
  114. if(data.length-ori<VIEW_COUNT){
  115. returndata.length-ori;
  116. }
  117. //如果比默认的值还要大,说明一页显示不完,还要用换一页显示,这一页用默认的值显示满就可以了。
  118. else{
  119. returnVIEW_COUNT;
  120. }
  121. }
  122. @Override
  123. publicObjectgetItem(intposition){
  124. //TODOAuto-generatedmethodstub
  125. returnposition;
  126. }
  127. @Override
  128. publiclonggetItemId(intposition){
  129. //TODOAuto-generatedmethodstub
  130. returnposition;
  131. }
  132. @Override
  133. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  134. //TODOAuto-generatedmethodstub
  135. //returnaddTestView(position);
  136. TextViewtv=newTextView(activity);
  137. tv.setGravity(Gravity.CENTER);
  138. //TextView要显示的是当前的位置+前几页已经显示的位置个数的对应的位置上的值。
  139. tv.setText(data[position+index*VIEW_COUNT]);
  140. returntv;
  141. }
  142. }
  143. }
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;
             
         }
     }
 }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值