歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Listview分批加載+自動加載(附源碼下載)

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

日期:2017/3/1 9:44:40   编辑:Linux編程

實現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