RecycView notifyItemRemoved()、notifyItemInserted()、ローカルリフレッシュのピット.解決済み


引用:プロジェクトではRecycViewがよく使われており、従来はデータをリフレッシュする方法で、notifyDataSetChangedは、簡単で乱暴だった.また、削除アニメーションを挿入することはありません.より良い体験のために、notifyItemRemoved()を使用するのが一般的です.notifyItemInserted()はアニメーション効果、体験+を持っていますが、転位を削除したり、配列の下に境界を越えたりすることがわかります.why??? !以下をご覧ください
一、解決策:notifyItemRemoved()またはnotifyItemInserted()を呼び出し、呼び出しを覚えておく
wAdapter.notifyItemRangeChanged(position,data.size);//position item  ,data.size          

over、あなたの今の問題は解決すべきです.なぜか簡単に分析してみましょう
二、RecycViewアダプタnotifyDataSetChangedを呼び出すとrequestLayout()が呼び出され、すべてのItemが再描画されますが、notifiItemRemoved()/notifiItemInserted()を呼び出すと、現在のデータが除去され、アダプタに通知されません.itemの下付きpositionが変更されました.言い換えれば、他のitemは、あるitemが死んでいることを知らず、元の位置を占めているため、データの乱れを招いている.notifyItemRangeChange()を呼び出すのは、アダプタに、ある範囲内でItemの位置が変わったことを伝え、itemが並び直すことを通知することである.
ただし、notifyItemRangeChange()ああ、あなたのデータが大きすぎると、彼は性能に影響を与えたり、カートンに影響を与えたりします.一部の学生は、私の範囲が小さくなっています.例えば、10本です.じゃ、バグに一歩近づいておめでとうございます.20本のデータなら、最初のデータに挿入して、10本だけ更新して、10本以外のitemをクリックしたとき、申し訳ありません.10本以外のitemは知りませんでした.さっき何があったのか、何があったのかも分かりません.それとは関係ありません....位置はやはり乱れています.現在の解決はすべてのItemCountに転送することしかできません.できるだけページを分けてデータをロードして、1ページであまりロードしないでください!
以上はソースコードを見た後のいくつかの理解で、ソースコードはとても退屈で、だから書いた大衆はいくつかあって、便利に理解して、もし間違っているところがあれば、大物にも指導してもらいます!