在SwipeRefreshLayout中无法滚动ListView

15

我在使用SwipeRefreshLayout时遇到了问题。我在布局中放置了一个列表视图,每次向上滚动列表视图时,就会触发下拉刷新布局,导致无法滚动回到布局的顶部。有人有什么想法吗?

2个回答

29

我找到了我的问题的答案。当ListView中的第一个子项位于列表顶部时,我会手动启用SwipeRefreshLayout。

    listView.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView listView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            int topRowVerticalPosition = (listView == null || listView.getChildCount() == 0) ?
                            0 : expandableListview.getChildAt(0).getTop();
            refresh.setEnabled((topRowVerticalPosition >= 0));
        }
    });

谢谢,我也遇到了同样的问题,API 10中没有这个功能...在更新的API中也没有。看起来是一个bug。 - Mate
1
相同的解决方案,只是在帖子末尾更容易阅读:https://yassirh.com/2014/05/how-to-use-swiperefreshlayout-the-right-way/ - Alexandre G
3
如果ListView是SwipeLayout的唯一子项,则此方法可以正常工作。但是,如果除了ListView之外还有其他视图,并且您希望在除ListView之外的任何其他位置触摸并拉动时启用SwipeLayout,则此解决方案将无法正常工作。 - AlanKley
@AliAnsari ExpandableListView - VirtualProdigy
@AlexandreG 这个解决方案在这里运行得很好,而且非常清晰!感谢你的分享。 - Mohammed AlBanna
应用以下解决方案后,如果列表视图中的第一行高度大于屏幕尺寸,则会出现问题。它不会加载屏幕上的其他行,并且无法滚动。如果第一行的高度小于屏幕尺寸,则所有内容都按预期工作。 - Malav Shah

4

1
这是视图中唯一的子项。尽管上述解决方案对我有效。 - VirtualProdigy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接