今天使用listview+swiperefreshlayout进行刷新页面的制作,因为需要在头部添加一个viewpager,所以索性就listview.addheaderview进行了,发现添加了头部以后不能够通过firstVisibleItem进行判断,一般我们常规写法如下:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//或者在这里判断
if (view.getFirstVisiblePosition()==0){
//同样也可以
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem == 0 ) {
//到达头部
}
});
但由于我们加了一个头部,所以不能通过上述方法判断,那该如何判断呢?
我们可以通过获取头部的高度位置,即(getY())方法进行判断:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem<=oldfirstVisibleItem
&&firstVisibleItem==0
&&getHeaderY()==0){
//到头部后的操作
}else
{
//其余操作
}
oldfirstVisibleItem=firstVisibleItem;
}
});
//判断
private float getHeaderY(){
View headerView= listView.getChildAt(0);
if (headerView!=null){
LogUtils.showE("headerView.getY();",headerView.getY()+"");
return headerView.getY();
}
return -1f;
}