package cn.itcast.pageloaddata;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
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;
import cn.itcast.service.DataService;
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;
}
};
};
@Override
public 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();
}
}
}
}
yxkfw
- 粉丝: 82
- 资源: 2万+
最新资源
- 毕业设计-基于python实现的爬取携程景点数据和评论数据源代码+文档说明
- 微网优化调度 机组组合 主题:基于YALMIP 的微网优化调度模型 内容简介:程序基于MATLAB yalmip 开发,做了一个简单的微网优化调度模型,模型中含有蓄电池储能、风电、光伏等发电单元,程
- DEEP LEARNING:A Comprehensive Guide.pdf
- 毕业设计基于python实现的爬取携程景点数据和评论数据源代码+文档说明
- 微网孤岛优化调度 matlab 编程语言:matlab 内容摘要:采用灰狼算法实现微网孤岛优化调度,考虑风光、微燃机、燃料电池和蓄电池等主体,考虑价格型和激励型需求响应,以经济成本和环境治理成本为目标
- FactoryIO堆垛机仿真 使用简单的梯形图与SCL语言编写,通俗易懂,写有详细注释,起到抛砖引玉的作用,比较适合有动手能力的入门初学者 软件环境: 1、西门子编程软件:TIA Portal V1
- Comsol激光仿真通孔,利用高斯热源脉冲激光对材料进行蚀除过程仿真,其中运用了变形几何和固体传热实现单脉冲通孔的加工
- 毕业设计Python+Django音乐推荐系统源码+文档说明(高分毕设)
- glibC自动升级脚本
- C语言编写一个简单的俄罗斯方块游戏.docx
- 3b083教师工作量计算系统_springboot+vue.zip
- 3b081火车订票系统_springboot+vue.zip
- 3b082健身房管理系统_springboot+vue.zip
- C#与松下PLC串口 以太网通讯,自己写的,注释包含了自己理解和整理的资料,公司项目中使用,通讯用的PLC型号为FP-XH C60ET,文件包含:dll封装,测试程序,通讯文档 有代码注释
- python求链表长度的递归方法
- 3b084教师考勤系统_springboot+vue0.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈