Android資料分批載入-滑動到底部自動載入列表

來源:互聯網
上載者:User

標籤:android   style   blog   class   code   java   

Android資料分批載入-滑動到底部自動載入列表


2014年5月9日

本博文介紹如何進行資料分批載入,在應用開發當中會經常使用到ListView,點擊更多載入資料是我們經常簡單,為了提供使用者體驗,當使用者將列表滾動到底部自動載入資料,這樣的形式用得比較多。

下面給大家提供的例子是,每次類比20條資料,滑動到底部時再請求20條資料直到請求到限定頁數為止

具體代碼實現:

/08_Datapageload/src/com/wwj/datapageload/MainActivity.java

package com.wwj.datapageload;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends Activity {private ListView listView;private List<String> data = new ArrayList<String>();ArrayAdapter<String> adapter;View footer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);footer = getLayoutInflater().inflate(R.layout.footer, null);listView = (ListView) findViewById(R.id.listView);listView.setOnScrollListener(new ScrollListener());// 類比資料data.addAll(DataService.getData(0, 20));adapter = new ArrayAdapter<String>(this, R.layout.listview_item,R.id.textView, data);listView.addFooterView(footer);// 添加頁尾(放在ListView最後)listView.setAdapter(adapter);listView.removeFooterView(footer);}private int number = 20; // 每次擷取多少條資料private int maxpage = 5; // 總共有多少頁private boolean loadfinish = true; // 指示資料是否載入完成private final class ScrollListener implements OnScrollListener {@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {Log.i("MainActivity", "onScroll(firstVisibleItem="+ firstVisibleItem + ",visibleItemCount="+ visibleItemCount + ",totalItemCount=" + totalItemCount+ ")");final int loadtotal = totalItemCount;int lastItemid = listView.getLastVisiblePosition(); // 擷取當前螢幕最後Item的IDif ((lastItemid + 1) == totalItemCount) { // 達到資料的最後一條記錄if (totalItemCount > 0) {// 當前頁int currentpage = totalItemCount % number == 0 ? totalItemCount/ number: totalItemCount / number + 1;int nextpage = currentpage + 1; // 下一頁if (nextpage <= maxpage && loadfinish) {loadfinish = false;listView.addFooterView(footer);// 開一個線程載入資料new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}List<String> result = DataService.getData(loadtotal, number);// 發送訊息handler.sendMessage(handler.obtainMessage(100,data));}}).start();}}}}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {Log.i("MainActivity", "onScrollStateChanged(scrollState="+ scrollState + ")");}}private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {data.addAll((List<String>) msg.obj);// 告訴ListView資料已經發生改變,要求ListView更新介面顯示adapter.notifyDataSetChanged();if (listView.getFooterViewsCount() > 0) { // 如果有底部視圖listView.removeFooterView(footer);}loadfinish = true; // 載入完成};};}

/08_Datapageload/src/com/wwj/datapageload/DataService.java

package com.wwj.datapageload;import java.util.ArrayList;import java.util.List;public class DataService {public static List<String> getData(int offset, int maxResult) { // 分頁limit// 0,20List<String> data = new ArrayList<String>();for (int i = 0; i < 20; i++) {data.add("ListView資料的分批載入" + i);}return data;}}


如下:


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.