歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android動態更新ListView

實現效果:當滑動ListView列表最底端時,動態的添加新的列表項

實現步驟:
調用ListView的setOnScrollListener()方法設置滑動監聽器,實現OnScrollListener接口的方法
判斷當列表滑動到最低端時,加載新的列表項

接口OnScrollListener
onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
view 報告滑動狀態的視圖
firstVisibleItem 可視的第一個列表項的索引
visibleItemCount 可視的列表項個數
totalItemCount 總共的列表項個數
onScrollStateChanged(AbsListView view, int scrollState)
view 報告滑動狀態的視圖
scrollState 滑動狀態

滑動狀態
SCROLL_STATE_IDLE : 0  視圖沒有滑動
SCROLL_STATE_TOUCH_SCROLL : 1  用戶正在觸摸滑動,手指仍在屏幕上
SCROLL_STATE_FLING : 2  用戶之前觸摸滑動,現在正在滑行,直到停止

示例代碼:

  1. package dyingbleed.iteye;   
  2.   
  3. import Android.app.ListActivity;   
  4. import android.os.Bundle;   
  5. import android.os.Handler;   
  6. import android.os.Message;   
  7. import android.view.Gravity;   
  8. import android.view.LayoutInflater;   
  9. import android.view.View;   
  10. import android.view.ViewGroup;   
  11. import android.widget.AbsListView;   
  12. import android.widget.BaseAdapter;   
  13. import android.widget.ListView;   
  14. import android.widget.TextView;   
  15.   
  16. public class Main extends ListActivity {   
  17.        
  18.     private ListView listView;   
  19.     private MyListViewAdapter adapter;   
  20.        
  21.     private int scrollState;   
  22.        
  23.     private View footerView;   
  24.        
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {   
  27.         super.onCreate(savedInstanceState);   
  28.         setContentView(R.layout.main);   
  29.            
  30.         listView = getListView();   
  31.            
  32.         footerView = LayoutInflater.from(this).inflate(R.layout.progress, null);   
  33.                    
  34.         listView.addFooterView(footerView); //在ListView底部添加正在加載視圖     
  35.         //注意:addFooterView方法需要在調用setListAdapter方法前調用!   
  36.         adapter = new MyListViewAdapter();   
  37.         setListAdapter(adapter);   
  38.         getListView().setOnScrollListener(new AbsListView.OnScrollListener() {   
  39.                
  40.             @Override  
  41.             public void onScrollStateChanged(AbsListView view, int scrollState) {   
  42.                 Main.this.scrollState = scrollState;   
  43.             }   
  44.                
  45.             @Override  
  46.             public void onScroll(AbsListView view, int firstVisibleItem,   
  47.                     int visibleItemCount, int totalItemCount) {   
  48.                 int lastVisibleItem = firstVisibleItem + visibleItemCount - 1//可視的最後一個列表項的索引   
  49.                 /*  
  50.                  * 當列表正處於滑動狀態且滑動到列表底部時,執行  
  51.                  * */  
  52.                 if(Main.this.scrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE   
  53.                         && lastVisibleItem == totalItemCount - 1) {   
  54.                     /*  
  55.                      * 執行線程,睡眠5秒鐘後添加10個列表項  
  56.                      * */  
  57.                     new Thread() {   
  58.                            
  59.                         private Handler handler = new Handler() {   
  60.   
  61.                             @Override  
  62.                             public void handleMessage(Message msg) {   
  63.                                 super.handleMessage(msg);   
  64.                                 adapter.count += 10;   
  65.                                 adapter.notifyDataSetChanged();   
  66.                             }   
  67.                                
  68.                         };   
  69.   
  70.                         @Override  
  71.                         public void run() {   
  72.                             super.run();   
  73.                             try {   
  74.                                 sleep(5000);   
  75.                                 handler.sendEmptyMessage(0);   
  76.                             } catch (InterruptedException e) {   
  77.                                 e.printStackTrace();   
  78.                             }   
  79.                         }   
  80.                            
  81.                     }.start();   
  82.                        
  83.                 }   
  84.             }   
  85.         });   
  86.     }   
  87.        
  88.     private class MyListViewAdapter extends BaseAdapter {   
  89.            
  90.         int count = 50//初始列表項數量   
  91.   
  92.         @Override  
  93.         public int getCount() {   
  94.             return count;   
  95.         }   
  96.   
  97.         @Override  
  98.         public Object getItem(int position) {   
  99.             return position;   
  100.         }   
  101.   
  102.         @Override  
  103.         public long getItemId(int position) {   
  104.             return position;   
  105.         }   
  106.   
  107.         @Override  
  108.         public View getView(int position, View convertView, ViewGroup parent) {   
  109.             TextView result = (TextView) convertView;   
  110.             if(result == null) {   
  111.                 result = new TextView(Main.this);   
  112.                 result.setTextAppearance(Main.this, android.R.style.TextAppearance_Large);   
  113.                 AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(AbsListView.LayoutParams.FILL_PARENT,   
  114.                         AbsListView.LayoutParams.WRAP_CONTENT);   
  115.                 result.setLayoutParams(layoutParams);   
  116.                 result.setGravity(Gravity.CENTER);   
  117.             }   
  118.             result.setText("Item "+(position+1));   
  119.             return result;   
  120.         }   
  121.            
  122.     }   
  123. }  

運行結果

Copyright © Linux教程網 All Rights Reserved