スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【Android】RecyclerView.AdapterでnotifyItemRemovedするときは気をつける

はじめに


Androidアプリの開発するとき何かの一覧表示をするような機能を実装する場合、実装方法としてListViewからRecyclerViewにすっかり置き換わったような気がします。昔のアプリを触る場合などを除いて新しく作る場合などは特にそうですね。
今回はRecyclerViewを使って一覧のある要素を消す時に注意しなければ行けないポイントを紹介します。

具体例





細かい処理は全て割愛しますが、上記のようにAdapterに対して要素を消すメソッドを用意して、一覧からposの位置にあるデータを消せるようにしたとします。

これだけで見た目は削除されていますが、実はハマりどころがあります。
たとえば2個目のアイテムを削除したあとに4個目(2個目が消える前の5個目)を削除しようとすると、上記の処理だけでは消した要素以降の順番が消される前のままなので、順番がずれてしまっていて意図しない要素が削除されてしまうことになりかねません。

解決方法として以下のメソッドを呼び出します。



このnotifyItemRangeChangedを呼び出すことで今削除されたpos以降のアイテムたちに自分たちのpositionが変わっていることを通知することができます。

念のため最終的なコードにしてみます。



最後に


この問題の本当に怖いところは(notifyItemRangeChangedを呼ばずに)削除した後にスクロールなどして、削除された要素の数個の要素が一度画面から離れてしまうとこのズレた状態が再現しないことです。
連続した要素が消されたりする場合などに気をつけなければいけないので注意が必要です。
ListViewを使っていた頃(ちょっと昔ですが…)に比べると柔軟に処理ができるようになった感触はあるものの気をつけないといけませんね。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:Android  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。