zoukankan      html  css  js  c++  java
  • 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>

    结果显示:


     


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

    我是刚刚进入公司的Android实习生,菜鸟一枚,博客记录我犯过的错,收获的东西,学到的知识和技术,可能里面会有很多错误的地方,幼稚的地方,欢迎大家指出来,帮助我进步,但请别伤害我,我只是菜鸟一枚,我在努力争取进步。
  • 相关阅读:
    【LeetCode每日一题】2020.6.9 面试题46. 把数字翻译成字符串
    【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
    【NOIP2017提高A组模拟9.17】猫
    【NOIP2017提高A组模拟9.17】组合数问题
    JZOJ 11.21 提高B组反思
    【NOIP2017提高A组模拟9.12】Arrays and Palindrome
    JZOJ【NOIP2013模拟联考14】隐藏指令
    JZOJ 11.14 提高B组反思
    CSP2020复赛游记
    JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠
  • 原文地址:https://www.cnblogs.com/smilefortoday/p/3974287.html
Copyright © 2011-2022 走看看