Android - ListView判断滑动到了最底部和最顶部,以及上滑、下滑

说明:

总:判断Listview滑动到了最底部和最顶部

顶部判断:

firstVisibleItemView != null  --- 仅仅有这行代码只是判断出了第一个可见,但是第一个有高度,在第一个高度内不能判断是否真正的到订不了,所以要加上代码:firstVisibleItemView.getTop() == 0

代码:

1、外部系统ListView写法
mListView.setOnScrollListener(new OnScrollListener() {  
    @Override  
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {  
		//判断顶部底部
        if (firstVisibleItem == 0) {  
            View firstVisibleItemView = mListView.getChildAt(0);  
            if (firstVisibleItemView != null && firstVisibleItemView.getTop() == 0) {  
                Log.d("ListView", "##### 滚动到顶部 #####");  
            }  
        } else if ((firstVisibleItem + visibleItemCount) == totalItemCount) {  
            View lastVisibleItemView = mListView.getChildAt(mListView.getChildCount() - 1);  
            if (lastVisibleItemView != null && lastVisibleItemView.getBottom() == mListView.getHeight()) {  
                Log.d("ListView", "##### 滚动到底部 ######");         
            }  
        } 

	//判断滑动
	if (firstVisibleItem < lastVisibleItemPosition) {  
		// 上滑  
	} else if (firstVisibleItem > lastVisibleItemPosition) {  
		// 下滑  
	}
    }  
  
    @Override  
    public void onScrollStateChanged(AbsListView view, int scrollState) {  
        //do nothing  
    }  
      
}); 
2、内部自定义listview写法

下面是我为了解决下拉刷新和listview滑动冲突写的自定义listview,里面用到了监听到头部了

/**
 * 和下拉刷新配合的listview
 */
public class PullListView extends ListView {
    public PullListView(Context context) {
        super(context);
    }

    public PullListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PullListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        if (getFirstVisiblePosition() == 0 && getChildAt(0).getTop() == 0) {//到头部了
            getParent().requestDisallowInterceptTouchEvent(false);//放行
        } else {
            getParent().requestDisallowInterceptTouchEvent(true);//拦截
        }
        return super.onInterceptTouchEvent(ev);
    }
}



问题:

实际使用的时候,ListView未滚动触发onScroll,比如只有一个item,listview的onScroll会被处罚等,解决这个问题可以参考这篇文章:

Android - listview未滚动触发onScroll





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beluga_白鲸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值