android - 使用旧视图调用 ItemDecoration 方法
问题描述
我有一个带有 ListAdapter 的 RecyclerView,并且我已经向 RecyclerView 添加了一个 ItemDecoration,问题是当我从列表中删除一个项目并使用 ListAdapter 的submitList
方法更新列表时,ItemDecoration 方法就像getItemOffsets
和onDraw
被旧视图调用,而适配器已经改变了。我尝试使用该hasPendingAdapterUpdates
方法检测这些情况,但我没有运气,因为即使适配器和 RecyclerView 状态完全不同,它也会返回 false。
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
if (parent.hasPendingAdapterUpdates()) {
return
}
// getItemOffsets implementation
解决方案
更喜欢使用RecyclerView.Adapter
它会给你这个方法来覆盖即
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView)
recyclerView.addItemDecoration(ItemDecoration())
}
和
override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
super.onDetachedFromRecyclerView(recyclerView)
recyclerView.removeItemDecoration(decoration)
}
推荐阅读
- solidity - 如何编译旧的 zeppelin-solidity 合约实现
- laravel - Vue:发送到 Laravel 后端时上传的文件为空
- ruby-on-rails - Rails 在视图和控制器中使用不同的默认 url 选项?
- python - 当我写“#!!!”时 在 Spyder 中,它在左侧显示一个勾号。为什么?
- c - 将文件的时间戳设置为自定义时间
- css - 插值内的句柄
- r - 从表格中计算平均综合得分
- java - OpenApi 3 codegen java如何实现
- haskell - 了解 Data.Word 的实现
- react-native - React Native 最佳实践:2020 年的 bind() vs 箭头函数