实习工作中,分配到了一个给已经上线的android成品增加需求的任务,其中一项是给每个信息显示增加分页显示的功能(ListView的显示),于是上网查资料,看到了:
原地址:
大大的文章,在使用了尚大大的代码后,确实解决了问题,但是在使用过程中,发现了其中的问题,自己做了一些修改,待会将 如何修改、 项目源码 在下一篇文章中 贴出来:
尚大大的文章:
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; } }}
布局文件:
结果显示:
尚大大出现的问题,如何修改,项目源码: