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

Android Listview分批加載+自動加載(附源碼下載)

實現Android Listview分批加載+自動加載。

直接上代碼,代碼有注釋:

public class TestForListviewActivity extends Activity implements
  OnScrollListener {
 private ListView mListview = null;
 private View mFooterView;
 private PaginationAdapter mAdapter;
 private Handler handler=new Handler();
 private boolean isLoading;//表示是否正在加載
 private final int MAX_COUNT=35;//表示服務器上總共有MAX_COUNT條數據
 private final int EACH_COUNT=10;//表示每次加載的條數
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  mFooterView = getLayoutInflater().inflate(R.layout.loadmore, null);
  mListview = (ListView) findViewById(R.id.listview);
  mListview.addFooterView(mFooterView);// 設置列表底部視圖
 
  List<News> news=new ArrayList<News>();
  mAdapter = new PaginationAdapter(news);;
  mListview.setAdapter(mAdapter);
  //設置setOnScrollListener會自動調用onscroll方法。
  mListview.setOnScrollListener(this);

 }

 public void onScroll(AbsListView view, int firstVisibleItem,
   int visibleItemCount, int totalItemCount) {
 
  if (firstVisibleItem+visibleItemCount==totalItemCount&&!isLoading) {
   //isLoading = true 表示正在加載,加載完畢設置isLoading =false;
   isLoading = true;
   //如果服務端還有數據,則繼續加載更多,否則隱藏底部的加載更多
   if (totalItemCount<=MAX_COUNT) {
    //等待2秒之後才加載,模擬網絡等待時間為2s
    handler.postDelayed(new Runnable() {
     
     public void run() {
      loadMoreData();
     }
    },2000);
   }else{
    if (mListview.getFooterViewsCount()!=0) {
     mListview.removeFooterView(mFooterView);
    }
   }
   
  }

 }

 public void onScrollStateChanged(AbsListView arg0, int arg1) {
  Log.i("onScrollStateChanged", arg1+"");
 }
 
 private void loadMoreData(){
  int count = mAdapter.getCount();
  for (int i = 0; i < EACH_COUNT; i++) {
   if (count+i<MAX_COUNT) {
    News item = new News();
    item.setTitle("Title" + (count+i));
    item.setContent("This is News Content" + (count+i));
    mAdapter.addNewsItem(item);
   }else{
    mListview.removeFooterView(mFooterView);
   }
  }
  mAdapter.notifyDataSetChanged();
  isLoading = false;
 }

 class PaginationAdapter extends BaseAdapter {

  List<News> newsItems;

  public PaginationAdapter(List<News> newsitems) {
   this.newsItems = newsitems;
  }

  public int getCount() {
   return newsItems==null?0:newsItems.size();
  }

  public Object getItem(int position) {
   return newsItems.get(position);
  }

  public long getItemId(int position) {
   return position;
  }

  public void addNewsItem(News newsitem) {
   newsItems.add(newsitem);
  }

  public View getView(int position, View convertView, ViewGroup parent) {
   if (convertView == null) {
    convertView = getLayoutInflater().inflate(R.layout.list_item,
      null);
   }
   // 新聞標題
   TextView tvTitle = (TextView) convertView
     .findViewById(R.id.newstitle);
   tvTitle.setText(newsItems.get(position).getTitle());
   // 新聞內容
   TextView tvContent = (TextView) convertView
     .findViewById(R.id.newscontent);
   tvContent.setText(newsItems.get(position).getContent());

   return convertView;
  }
 }
}

-------------------------------------------分割線-------------------------------------------

Ubuntu 14.04 x64配置Android 4.4 kitkat編譯環境的方法 http://www.linuxidc.com/Linux/2014-05/101148.htm

Ubuntu 12.04搭建Android開發環境 http://www.linuxidc.com/Linux/2012-09/69961.htm

Ubuntu 14.04 配置 Android SDK 開發環境 http://www.linuxidc.com/Linux/2014-05/101039.htm

64位Ubuntu 11.10下Android開發環境的搭建(JDK+Eclipse+ADT+Android SDK詳細) http://www.linuxidc.com/Linux/2013-06/85303.htm

Ubuntu 12.10 x64 安裝 Android SDK http://www.linuxidc.com/Linux/2013-03/82005.htm

-------------------------------------------分割線-------------------------------------------

本文Demo源碼下載:

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

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

具體下載目錄在 /2014年資料/5月/11日/Android Listview分批加載+自動加載(附源碼下載)

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

 

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved