Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android中使用ListView實現分段加載更新

Android中使用ListView實現分段加載更新

編輯:Android開發實例

 ListView是android中最常用的控件之一。


在實際運用中往往會遇到一次性加載全部數據過多,需要分頁加載增加程序運行效率!
本demo是將更新的監聽放在listview的foot中,通過底部按鈕點擊觸發或者通過滑動事件監聽,當滑動到列表最底部的時候觸發。

有圖有真像:

列表初始狀態

觸發加載

加載後

部分代碼:

MainActivity

 

  1. private void initActivity() { 
  2.         // TODO Auto-generated method stub 
  3.         loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null); 
  4.         loadmore_btn = (Button) loadMoreView.findViewById(R.id.loadmore_btn); 
  5.         loadmore_btn.setOnClickListener(new OnClickListener() { 
  6.  
  7.             @Override 
  8.             public void onClick(View v) { 
  9.                 // TODO Auto-generated method stub 
  10.                 doUpdate(); 
  11.             } 
  12.         }); 
  13.         listView = (ListView) findViewById(R.id.listView); 
  14.         listView.addFooterView(loadMoreView); 
  15.         initAdapter(); 
  16.         listView.setAdapter(adapter); 
  17.         listView.setOnScrollListener(new OnScrollListener() { 
  18.  
  19.             @Override 
  20.             public void onScrollStateChanged(AbsListView view, int scrollState) { 
  21.                 // TODO Auto-generated method stub 
  22.                 int itemsLastIndex = adapter.getCount() - 1; 
  23.                 int lastIndex = itemsLastIndex + 1; 
  24.                 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE 
  25.                         && visibleLast == lastIndex) { 
  26.                     // 可在這添加滑到列表底的時候異步自動加載 
  27.                     // doUpdate(); 
  28.                 } 
  29.             } 
  30.  
  31.             @Override 
  32.             public void onScroll(AbsListView view, int firstVisibleItem, 
  33.                     int visibleItemCount, int totalItemCount) { 
  34.                 // TODO Auto-generated method stub 
  35.                 visibleCount = visibleItemCount; 
  36.                 visibleLast = firstVisibleItem + visibleItemCount - 1; 
  37.             } 
  38.         }); 
  39.     } 
  40.  
  41.     protected void doUpdate() { 
  42.         // TODO Auto-generated method stub 
  43.         loadmore_btn.setText("loading ..."); 
  44.         handler.postDelayed(new Runnable() { 
  45.             @Override 
  46.             public void run() { 
  47.                 // TODO Auto-generated method stub 
  48.                 loadData(); 
  49.                 adapter.notifyDataSetChanged();// 通知adapter數據變化 
  50.                 listView.setSelection(visibleLast - visibleCount + 1); 
  51.                 loadmore_btn.setText("Load More"); 
  52.             } 
  53.         }, 2000); 
  54.     } 
  55.  
  56.     private void loadData() { 
  57.         // TODO Auto-generated method stub 
  58.         int count = adapter.getCount(); 
  59.         for (int i = count; i < count + 10; i++) { 
  60.             adapter.addItem(String.valueOf(i + 1)); 
  61.         } 
  62.     } 
  63.  
  64.     private void initAdapter() { 
  65.         // TODO Auto-generated method stub 
  66.         List<String> items = new ArrayList<String>(); 
  67.         for (int i = 0; i < 10; i++) { 
  68.             items.add(String.valueOf(i + 1)); 
  69.         } 
  70.         adapter = new ListAdapter(this, items); 
  71.     } 
  72.  
  73.     @Override 
  74.     public boolean onCreateOptionsMenu(Menu menu) { 
  75.         // Inflate the menu; this adds items to the action bar if it is present. 
  76.         getMenuInflater().inflate(R.menu.activity_main, menu); 
  77.         return true; 
  78.     } 

ListAdapter

 

  1. public ListAdapter(Context context, List<String> items) { 
  2.         this.items = items; 
  3.         this.inflater = (LayoutInflater) context 
  4.                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  5.     } 
  6.  
  7.     @Override 
  8.     public int getCount() { 
  9.         // TODO Auto-generated method stub 
  10.         return items.size(); 
  11.     } 
  12.  
  13.     @Override 
  14.     public Object getItem(int position) { 
  15.         // TODO Auto-generated method stub 
  16.         return items.get(position); 
  17.     } 
  18.  
  19.     @Override 
  20.     public long getItemId(int position) { 
  21.         // TODO Auto-generated method stub 
  22.         return position; 
  23.     } 
  24.  
  25.     @Override 
  26.     public View getView(int position, View convertView, ViewGroup parent) { 
  27.         // TODO Auto-generated method stub 
  28.         if (convertView == null) { 
  29.             convertView = inflater.inflate(R.layout.list_item, null); 
  30.         } 
  31.         TextView textView = (TextView) convertView 
  32.                 .findViewById(R.id.list_item_text); 
  33.         textView.setText(items.get(position)); 
  34.         return convertView; 
  35.     } 
  36.  
  37.     /** 
  38.      * 添加列表項 
  39.      * @param item 
  40.      */ 
  41.     public void addItem(String item){ 
  42.         items.add(item); 
  43.     } 

 

提醒一下:要下載android-support-v4.jar  這個第三方的jar包哦! 這裡就不提供下載了!

 源碼下載:LoadMore.rar

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved