ListView 分页显示(转载+修改)上

实习工作中,分配到了一个给已经上线的android成品增加需求的任务,其中一项是给每个信息显示增加分页显示的功能(ListView的显示),于是上网查资料,看到了:

原地址:http://www.cnblogs.com/shang53880

尚弦月 大大的文章,在使用了尚大大的代码后,确实解决了问题,但是在使用过程中,发现了其中的问题,自己做了一些修改,待会将 如何修改、 项目源码 在下一篇文章中 贴出来:


尚大大的文章:

package com.anddev.ListMore.Test;

 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.main);
        
        //加载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;
            
        }
    }
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView  android:id="@+id/list"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="bottom"
    >
<Button  android:id="@+id/btnLeft"
    android:layout_width="150dip" 
    android:layout_height="wrap_content" 
    android:text="@string/textLeft"
    />
<Button  android:id="@+id/btnRight"
    android:layout_width="150dip" 
    android:layout_height="wrap_content" 
    android:text="@string/textRight"
    />
</LinearLayout>
</LinearLayout>

结果显示:


 


     尚大大出现的问题,如何修改,项目源码:看这里

posted @ 2014-09-16 10:03  叫我工作狂  阅读(299)  评论(0编辑  收藏  举报