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);
}
}
}
记录一下,,,
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);
}
}
}
记录一下,,,
相关文章推荐
- AndroidPN任务机制
- How to get the root permission of android
- Android使用Bmob移动后端云Restful API需要注意的问题
- Android实现button居中的方法
- Android视频采集编码颜色格式选择
- 当Android系统内存不足时,会回收后台运行应用的内存
- Android调用手机拍照功能的方法
- Android应用开发学习—Toast使用方法大全
- Android 事件传递 ——下拉刷新
- Android Git 开源项目分类汇总 好用的Android开发库
- Android PopupWindow使用之地区、学校选择二级联动
- %1$s %1$d (java & Android 格式化字符串)
- Android EditText 光标颜色的修改方法及闪烁时颜色不一致的解决方法
- Android Touch事件分发机制
- android开发问题总节
- 九个角度分析对比 Android、iOS开发区别
- Android 沉浸式状态栏攻略 让你的状态栏变色吧
- Android滑动返回-swipebacklayout解析
- android 自定义控件显示高度为0
- android-弹出窗口的使用(1)