ListAdapter を備えた RecyclerView があり、ItemDecoration を RecyclerView に追加しました。問題は、リストから項目を削除し、ListAdapter の submitList メソッドを使用してリストを更新するときです。getItemOffsets や onDraw などの ItemsDecoration メソッドが呼び出されます。古いビューでは、アダプターはすでに変更されています。 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)
}