如何正确禁用SwipeRefreshLayout下拉刷新功能?

3

我有一个使用SwipeRefreshLayout的ListView,它可以正常工作。但是我并不总是想要下拉刷新动画或者回调触发。

在我的情况下,下拉刷新操作会将视图与服务器同步,但是服务器同步可以作为首选项选择性地禁用。当同步被禁用时,我根本不希望进行下拉刷新。

我目前正在做的是子类化SwipeRefreshLayout并覆盖`canChildScrollUp'以“欺骗”它,即实际上它无法滚动,但我不想要动画。

因此:

private class ListFragmentSwipeRefreshLayout extends SwipeRefreshLayout
{
    public ListFragmentSwipeRefreshLayout(Context context) { super(context); }

    @Override
    public boolean canChildScrollUp()
    {
        final ListView view = getListView();
        if (view.getVisibility() == View.VISIBLE)
            return !shouldShowRefresh(view);

        return false;
    }
}

实现`shouldShowRefresh'的过程考虑到它是否能够滚动以及我的网络同步设置。

这种做法是有效的,但我提出这个问题是因为它看起来是一个常见的要求,而混淆`canChildScrollUp'会让代码变得凌乱。

谢谢。


为什么你不在不需要时使用SwipeRefreshLayout,而在这种情况下使用普通的listview呢?这不是更简单吗? - Nanoc
@Nanoc,`setEnabled'就像下面回答的那样做得很好。只有在视图的整个生命周期中需要其中之一时,你的方法才更好。事实证明,我想在视图处于活动状态时改变其启用状态。 - jkj yuio
1个回答

8
如果我理解正确,您希望根据同步状态启用和禁用 SwipeRefreshLayout 。您可以像这样制作:
if(sync){
  swipeRefreshLayout.setEnabled(true);
else
  swipeRefreshLayout.setEnabled(false);

其中,sync是一个布尔值,用于指示是否启用同步功能。


谢谢。我原本以为 setEnabled 是与布局本身的启用相关,会禁用我的列表视图。你是对的,这个启用只是启用/禁用滑动操作。这就是答案,谢谢。 - jkj yuio

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