目标:当一个ListView在上下滑动时(scroll up / scroll down),当List中的内容比较多时,会分批load进其中的内容。这在各类型App中很常见。我们现在就是做一个动态加载列表内容功能。
特点: 与平时的到了页底再load data不同,假如每次翻页为20条数据,我做的是当ListView滚动停下来时,离页底还有15条数据时就准备load data。也就是说在正常翻页速度下,用户是看不到load data的状态的(为了调试,要设置长一点sleep time以便观察)。
以下是部分关键代码,e.g.
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
int firstVisiblePosition = view.getFirstVisiblePosition();
if (sideData.size() < getDataCount()) { // current accumulated items count < total items count
canLoad = true;
} else {
canLoad = false;
}
if (firstVisiblePosition >= currentPage.get() * pageSize - 15) { // 离页底还有15条数据时就准备load data
int maxPage = getDataCount() / pageSize;
if (currentPage.get() + 1 <= maxPage && canLoad) {
/* 每次翻页前添加页脚 */
listView.addFooterView(footer);
listView.setAdapter(adapter);
/* 创建子线程,执行翻页 */
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(3000);