使用AbsListView OnScrollListener简单实现android ListView的分页

本文介绍了如何利用AbsListView的OnScrollListener实现ListView的分页加载。在用户滚动时,通过监听onScroll事件并结合firstVisibleItem、visibleItemCount和totalItemCount参数判断是否达到分页条件,从而实现列表的动态加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  AbsListView的OnScrollListener有两个方法,一个是onScroll,一个是onScrollStateChanged.

public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount)
public void onScrollStateChanged(AbsListView view, int scrollState)


onScroll在AbsListView scroll的时候被回调,所以只要确认当前显示的是否是最后的数据,如果是我们加上footer view,显示加载的信息,启动异步加载任务,当任务结束,remove footer view.在这里我们需要使用到AbsListview的footerView.为了防止发生classcastexception,在AbsListView setAdapter之前需要addFooterView,可以按具体情况分析,因为可能只有单一的一页,根据初次返回的size判断是否需要addFooterView,那么如何确定当前显示的数据已经到达了adapter的最后一行?可以通过onScroll提供的参数来判断条件,比如如下代码:

@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		// TODO Auto-generated method stub
		int lastVisibleItem = firstVisibleItem + visibleItemCount
				- mListView.getHeaderViewsCount();
		this.firstVisibleItem=firstVisibleItem;
	
		if (mAdapter != null && lastVisibleItem == mAdapter.getCount()
				&& mListView.getFooterViewsCount() == 0
				&& (mTask == null || mTask.isCancelled()) && mHasMore) {
			mListView.addFooterView(mFooterView);
			mTask = new GetCommentTask(this);
			mTask.execute((new Long[] { mAlbumId,
					commentList.get(commentList.size() - 1).commentId,
					PULL_DOWN_REQUEST }));
		}

	}

需要注意的是onScroll在用户没有采取任何动作的情况下,也会调用onScroll,这是程序内部调用,在初始化absListview的时候,所以需要加上别的判断条件。

附上各个参数的意义:

firstVisibleItem:从0开始,表示当前向下显示的view的顺序,注意如果有header,那么header也会算在里面,因为是从最上面的子view到当前view的顺序。

visibleItemCount:当前可见的view的数量.

totalItemCount:所有的项数,包含header和footer。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值