android SwipeRefreshLayouth和ListView冲突解决

在最近的项目中,遇到下拉刷新的需求..第一时间就想到了谷歌自家的SwipeRefreshLayouth,以前用过这个东西,在这里面放一个listview或者gridview的时候效果很不错.当初写demo的时候也是这么写的.但是当真正使用他的时候,就发现了尴尬的事情.例如..我的SwipeRefreshLayouth里面上方有两个按钮.按钮下面才是listview,这个时候如果手指往上滑,去查看更多的listview的item的时候没有丝毫问题.但是当手指向下,准备查看刚才滑过去的item的时候,竟然触发了SwipeRefreshLayouth的下拉刷新..表示很尴尬...这个时候我们仅仅需要在listview滑动的时候去判断当前是不是第一个item就行了.是第一个的话再去启用SwipeRefreshLayouth的刷新功能,不然就禁用他的刷新功能,所以我们直接给listview设置一个滑动监听,然后在里面设置SwipeRefreshLayouth的状态就行了

package com.zzyzh.bbd.widget;

import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;

/**
 * @author imgod
 *
 */
public class SwpipeListViewOnScrollListener implements AbsListView.OnScrollListener {

	private SwipeRefreshLayout mSwipeView;
	private AbsListView.OnScrollListener mOnScrollListener;

	public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView) {
		mSwipeView = swipeView;
	}

	public SwpipeListViewOnScrollListener(SwipeRefreshLayout swipeView, OnScrollListener onScrollListener) {
		mSwipeView = swipeView;
		mOnScrollListener = onScrollListener;
	}

	@Override
	public void onScrollStateChanged(AbsListView absListView, int i) {
	}

	@Override
	public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
		View firstView = absListView.getChildAt(firstVisibleItem);
		// 当firstVisibleItem是第0位。如果firstView==null说明列表为空,需要刷新;或者top==0说明已经到达列表顶部, 也需要刷新
		if (firstVisibleItem == 0 && (firstView == null || firstView.getTop() == 0)) {
			mSwipeView.setEnabled(true);
			absListView.scrollTo(0, 0);// 当listview的item高度过大的话,可能依然会有尴尬,所以这里我们判断第一个显示的时候,就挪到首位
		} else {
			mSwipeView.setEnabled(false);
		}
		if (null != mOnScrollListener) {
			mOnScrollListener.onScroll(absListView, firstVisibleItem, visibleItemCount, totalItemCount);
		}
	}
}

记录一下,,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值