文档章节

SwipeRefreshLayout下拉刷新冲突解决

丁佼
 丁佼
发布于 2015/04/29 15:21
字数 244
阅读 19853
收藏 7

使用SwipeRefreshLayout,网上资料copy了一个OnScrollListener给ListView,

结果当第一个item长度超过一屏,明明还没有到达列表顶部,Scroll事件就被拦截,列表无法滚动,同时启动了刷新。

修正代码后,自定义的OnScrollListener如下:

/** 由于Listview与下拉刷新的Scroll事件冲突, 使用这个ScrollListener可以避免Listview滑动异常 */
public static 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);
        } else {
            mSwipeView.setEnabled(false);
        }
        if (null != mOnScrollListener) {
            mOnScrollListener.onScroll(absListView, firstVisibleItem,
                    visibleItemCount, totalItemCount);
        }
    }
}


© 著作权归作者所有

丁佼
粉丝 5
博文 26
码字总数 9223
作品 0
连云港
程序员
私信 提问
加载中

评论(6)

寒平洛一
寒平洛一
但是,上拉加载就用不了
x
xanaduo
感谢,可以!
睡不醒了睡
睡不醒了睡
很有帮助!
魁子
魁子
表示我也遇到这问题了!!用了一下午时间都没有解决!看了这个一下搞定!!谢谢啦!!!赞
y
yangfengfeng

引用来自“liyCode”的评论

我今天也遇到这个问题啦
你按照上面的方法解决问题了没?
liyCode
liyCode
我今天也遇到这个问题啦
在SwipeRefreshLayout中加入多个子View

在SwipeRefreshLayout中加入多个子View 小憩之地2014-09-29482 阅读 Android SwipeRefreshLayout是由Android官方提供的下拉刷新Widget。最低在v4中可用。 最近使用了一下,发现虽然是官方出品...

小憩之地
2014/09/29
0
0
滑动事件总结(刷新,加载更多,嵌套滑动)

下拉刷新 在Api21之前,ListView和GridView的使用相当普遍,包括下拉刷新我们也可以使用它,利用他的addHeaderView()和addFooterView()方法,或者使用父级中隐藏View的方式来实现; 在A...

卐字旗下的余晖
2016/06/07
163
0
【Android】RecyclerView下拉刷新与加载更多

知道自己不能做什么远比知道自己能做什么重要。 RecyclerView是Android L版本中新添加的控件,它的灵活性、可替代性、回收机制等比listview更好。可能对于一些使用过RecyclerView的开发者会说...

zrunker
2017/10/26
0
0
webview下拉刷新遇到网页中有js,有冲突,求助。(android)

使用了pullToRefresh和SwipeRefreshLayout。 都会和js(有一个可以上下滑动了东西)冲突, 想在网页内下划,却触发了下拉刷新。不知道怎么破。

clipperL
2015/06/18
677
0
SwipeRefreshLayout嵌套 Scrollview 滑动冲突

界面上是外层SwipeRefreshLayout 内层Scrollview。 加载失败时下拉,SwipeRefreshLayout无法触发刷新 网上找到一段代码: log没有打印。 原因我分析应该是Scrollview原来有空白的背景和一些边...

新宿豪雨
2016/07/29
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

射频特征阻抗

Characteris Impendance(特性阻抗,也称为‘特征阻抗’)是我们经常看到并使用自己的术语之一,但非常模糊且难以解释。以下是来自几个不同来源的Characteris Impendance(特性阻抗)的一些定义。...

demyar
17分钟前
1
0
Spring Boot Tomcat配置项

参数配置容器 server.xx开头的是所有servlet容器通用的配置,server.tomcat.xx开头的是tomcat特有的参数,其它类似。 所有参数绑定配置类:org.springframework.boot.autoconfigure.web.Serv...

xiaomin0322
21分钟前
2
0
微课程 | 第二课《Docker 安装方式介绍》

微课程 | 第二课《Docker 安装方式介绍》视频 https://v.youku.com/v_show/id_XNDQ0NDUzNjkxNg==.html?spm=a2hzp.8244740.0.0 上一期我们介绍了 DBLE 的基本概况,下面进入我们的正题,正题基...

爱可生
21分钟前
2
0
GUAVA--基础工具(Preconditions)

1、前置条件 俗话说丑话讲在前面,在做某些事情的时候是需要做一些前置条件的。假如需要修改一条数据的话,当参数传进来,我们要先查询这条数据是否存在。这时候就需要一个if了,如果参数还需...

MrYuZixian
35分钟前
6
0
PythonSpot 中文系列教程 · 翻译完成

原文:PythonSpot Python Tutorials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 在线阅读 ApacheCN 学习资源 目录 PythonSpot 中文系列教...

ApacheCN_飞龙
43分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部