首页 > 解决方案 > 使用旧视图调用 ItemDecoration 方法

问题描述

我有一个带有 ListAdapter 的 RecyclerView,并且我已经向 RecyclerView 添加了一个 ItemDecoration,问题是当我从列表中删除一个项目并使用 ListAdapter 的submitList方法更新列表时,ItemDecoration 方法就像getItemOffsetsonDraw被旧视图调用,而适配器已经改变了。我尝试使用该hasPendingAdapterUpdates方法检测这些情况,但我没有运气,因为即使适配器和 RecyclerView 状态完全不同,它也会返回 false。

override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
    if (parent.hasPendingAdapterUpdates()) {
      return
    }
    // getItemOffsets implementation

调试器信息

标签: androidandroid-recyclerview

解决方案


更喜欢使用RecyclerView.Adapter它会给你这个方法来覆盖即

 override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
        super.onAttachedToRecyclerView(recyclerView)
        recyclerView.addItemDecoration(ItemDecoration())
    }

override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
        super.onDetachedFromRecyclerView(recyclerView)
        recyclerView.removeItemDecoration(decoration)
}

推荐阅读