【Android进阶】Listview分页加载数据的实现

来源:互联网 发布:在线制作身份证号软件 编辑:程序博客网 时间:2024/05/09 14:00

Listview分页加载数据的实现

public class MainActivity extends Activity {protected static final int SUCCESS_GET_DATA = 0;private ListView listview;private DataService service;private List<String> data;// 加载的总数据private ArrayAdapter<String> adapter;private boolean finish = true;// 是否加载完成private View footer;private Handler mHandler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case SUCCESS_GET_DATA:@SuppressWarnings("unchecked")ArrayList<String> result = ((ArrayList<String>) msg.obj);data.addAll(result);// 让listview自动刷新adapter.notifyDataSetChanged();finish = true;// 将页脚删除掉if (listview.getFooterViewsCount() > 0) {listview.removeFooterView(footer);}break;default:break;}};};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);listview = (ListView) findViewById(R.id.listview);service = new DataService();data = new ArrayList<String>();List<String> result = service.getData(0, 20);data.addAll(result);adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv_info,data);footer = View.inflate(this, R.layout.footer, null);// 在增加listview的页脚之前,需要提前设置一次listview.addFooterView(footer);listview.setAdapter(adapter);// 然后再次将页脚删除掉listview.removeFooterView(footer);// 滚动监听事件listview.setOnScrollListener(new MyOnScrollListener());}private final class MyOnScrollListener implements OnScrollListener {// 加载的总页数private int countPage = 5;// 每页加载20条数据private int pageSize = 20;// 滚动状态发生改变时public void onScrollStateChanged(AbsListView view, int scrollState) {Log.i("i", " scrollState " + scrollState);}// 当list开始滚动时public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// 最下面的条目数final int totalCount = firstVisibleItem + visibleItemCount;int currentPage = totalCount / pageSize;// 当前页int nextPage = currentPage + 1;// 下一页// 当翻到最后一条数据时if (totalCount == totalItemCount && nextPage <= countPage && finish) {// 已经移动到了listview的最后finish = false;// 添加页脚listview.addFooterView(footer);new Thread() {public void run() {SystemClock.sleep(3000);List<String> result = service.getData(totalCount + 1,pageSize);Message msg = new Message();msg.what = SUCCESS_GET_DATA;msg.obj = result;mHandler.sendMessage(msg);};}.start();}}}}

数据服务类,这里进行数据的模拟获取

public class DataService {//加载数据public List<String> getData(int startPosition ,int offset){List<String> data = new ArrayList<String>();for(int i = 0;i< 20;i++){data.add("分页加载的数据   " + i);}return data;}}


点击下载源码

0 0