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

Android中動態更新ListView【附源碼】

在使用ListView時,會遇到當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. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <ListView  
  8.         android:id="@id/android:list"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="match_parent"  
  11.         android:layout_weight="1"  
  12.         android:drawSelectorOnTop="false"  
  13.         />  
  14. </LinearLayout>  

// footer.xml 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:gravity="center"  
  6.     android:orientation="horizontal"  
  7.     >  
  8.     <ProgressBar  
  9.         android:id="@+id/progressbar"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         style="\?android:attr/progressBarStyleSmall"  
  13.         />  
  14.     <TextView  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:textSize="20.0sp"  
  18.         android:text="正在加載..."  
  19.         />  
  20. </LinearLayout>  

然後是主代碼:

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

效果預覽:

Android中動態更新ListView源碼下載

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/8月/4日/Android中動態更新ListView【附源碼】/

Copyright © Linux教程網 All Rights Reserved