閱讀603 返回首頁    go 技術社區[雲棲]


Android ListView 按鈕點擊分頁顯示

 列表的顯示需要三個元素:

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;
             
         }
     }
 }

HeaderBottomListDemo_MORE_PAGES_.rar (473.5 KB)

最後更新:2017-04-02 22:15:49

  上一篇:go JavaWeb項目的中文亂碼的原因以及Servlet中處理GET請求和POST請求編碼過濾器
  下一篇:go 原創Hadoop基礎題庫