ListView 分页显示
程序员文章站
2022-05-20 17:52:57
...
列表的显示需要三个元素:
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; } } }