Android数据分批加载-滑动到底部自动加载列表

               

Android数据分批加载-滑动到底部自动加载列表


2014年5月9日

 摘自:《Android高级开发实战—ui、ndk与安全》

 本博文介绍如何进行数据分批加载,在应用开发当中会经常使用到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; @Override protected 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 {  @Override  public 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的ID   if ((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() {       @Override       public 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();     }    }   }  }  @Override  public 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,20  List<String> data = new ArrayList<String>();  for (int i = 0; i < 20; i++) {   data.add("ListView数据的分批加载" + i);  }  return data; }}


效果图如下:

 


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/ytffhew/article/details/87797936