当第一个项目高度为0时,SwipeRefreshLayout无法正常工作

9

SwipeRefreshLayout在包含RecyclerViewSwipeRefreshLayout中第一个项目高度为零时,不起作用(动画未显示,onRefresh未被调用)。

您可以查看一个测试项目在Github上展示这一点。

我的问题是:这种影响是否可以规避? 在我的实际项目中,由于我无法控制的情况(广告库),我的列表的第一个项目有时会有高度为0,因此将其设置为View.GONE或高度为1不是一个选择。

2个回答

3
发现一个解决方法:把 RecyclerView 放入另外一个视图中。
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </FrameLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

它会导致额外的过度绘制,但是可以正常运行。

在此处发现了几个更多的建议:https://github.com/airbnb/epoxy/issues/74


这对我有效,但你知道为什么会发生这种情况吗? - DeePanShu
@DeePanShu 我没有时间调试recyclerView,但我觉得如果第一个项目高度为零,它似乎不会触发SwipeRefreshLayout回调。 - Siarhei
2
我通过在布局底部添加1dp的填充来解决了这个问题,所有视图都消失了。 - DeePanShu

0
如果您可以从广告库中获取回调,则应该能够通过根据广告视图是否有内容来添加和删除广告项,从而解决该错误。这样就可以绕过该bug。

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