Android ListView分頁加載數據Demo
一個簡單的Android分頁加載數據的實例,實例中加載方式是滑動到底部自動加載下頁數據,現在加載方式可以是點擊拖拽一個自己定義的控件。
下面是一個主要的Activity代碼:
public class MainActivity extends Activity { private ListView listview; private View footer; private List<String> data; private ArrayAdapter<String> adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listview = (ListView) findViewById(R.id.listview); // 給adapter添加數據 data = new DataService().getData(); adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv_name, data); // 必須在setAdapter之前把head和Footer設置好 footer = getLayoutInflater().inflate(R.layout.footer, null); listview.addFooterView(footer); // listview設置adpater listview.setAdapter(adapter); listview.removeFooterView(footer); // 以上就可以顯示ListView上的數據,可是不能分頁顯示,沒有給LIstView添加滾動事件, // 下面我們來給ListVIew添加滾動事件,從而達到自動刷新ListView分頁加載數據的功能 listview.setOnScrollListener(new MyOnScrollListener()); } public final class MyOnScrollListener implements OnScrollListener { protected static final int GET_DATA_SUCCESS = 0; private int pageCount = 20; private int pageSize = 5; // 是否加載完成 Boolean finish = true; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { msg.what = GET_DATA_SUCCESS; List<String> result = (List<String>) msg.obj; data.addAll(result); finish = true; if (listview.getFooterViewsCount() > 0) { listview.removeFooterView(footer); } // 通知適配器更新數據 adapter.notifyDataSetChanged(); }; }; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 計算當前加載上來的全部item數目 int totalItem = firstVisibleItem + visibleItemCount; // 計算當前頁 int currenPage = totalItemCount / pageSize; // 計算下一頁的數值 int nextPage = currenPage + 1; // 當 當前加載過的item總數目等于總顯示過的Item數目的時候可以去加載 if (totalItem == totalItemCount) { if (nextPage < pageCount && finish) { finish = false; listview.addFooterView(footer); // 開始加載數據 new Thread() { public void run() { SystemClock.sleep(3000); List<String> result = new DataService().getData(); Message msg = new Message(); msg.what = GET_DATA_SUCCESS; msg.obj = result; mHandler.sendMessage(msg); } }.start(); } } } } }如下是提供數據的service,
public class DataService { /* * 每次生成一個20個元素的List列表返回 */ public List<String> getData() { List<String> data = new ArrayList<String>(); for (int i = 0; i < 20; i++) { data.add("當前item的id是:" + i); } return data; } }
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!