您的位置:首页 > 移动开发 > Android开发

android SwipeRefreshLayouth和ListView冲突解决

2015-09-24 12:47 435 查看
在最近的项目中,遇到下拉刷新的需求..第一时间就想到了谷歌自家的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);
}
}
}

记录一下,,,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: