android - 古いビューで呼び出されるItemDecorationメソッド

okwaves2024-01-25  10

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)
}

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。