如何解决ItemDecoration 仅在使用 ListAdapter 时重新启动活动后才适用
当我使用 RecyclerView 时,ItemDecoration 工作得很好。目前,在移动到 ListAdapter 后,我的项目装饰仅在重新创建活动后出现。其实,我明白为什么会这样。当我使用 RecyclerView 时,我使用了 notifyDataSetChanged() 来更新我的列表。现在我只是使用内部 submitList,它使用方法只更新一个项目(而不是整个数据集)。但是我现在该怎么办?降级到 RecyclerView 及其 notifyDataSetChanged()?还有其他决定吗?
更新。 当我使用 StaggeredGridLayoutManager(2,VERTICAL) 时出现我的问题。当我只使用 LinearLayoutManager 时,问题就消失了,但我需要它们(布局管理器)。 我的物品装饰:
class SpacesItemDecoration(private var space: Int,private var type: String = "main_grid") : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect,view: View,parent: RecyclerView,state: RecyclerView.State) {
super.getItemOffsets(outRect,view,parent,state)
if (type == "main_grid") {
//grid layout with 2 columns
val layoutParams = view.layoutParams as StaggeredGridLayoutManager.LayoutParams
outRect.bottom = space
if (layoutParams.spanIndex % 2 == 0) {
outRect.right = space/2
}
else {
outRect.left = space/2
}
}
else if (type == "main_list") {
//list layout
outRect.bottom = space
}
}
}
解决方法
其实是RecyclerView和ListAdapter的通病。所以,我的问题与 here 和 here 描述的相同。 This solution 仅在 ListAdapter 的所有元素都可见时帮助我解决了该错误。如果屏幕上的元素过多,错误会再次出现(它有点不同,但仍然带有装饰)。所以,对我来说唯一的方法 - 使用 notifyDataSetChanged() 降级到 RecyclerView +。这是不好的做法,但无论如何。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。