追加、更新、削除の実装2016年11月20日(編集2016年11月20日)TweetAndroidアプリで一覧データのUI(ユーザーインターフェース)を作成する場合は、ListViewかRecyclerViewを使います。この記事は、RecyclerViewでデータ追加、更新、削除の実装方法を記載した記事です。中級者向けサンプルコードAndroid-RecyclerView-DemoRecyclerViewRecyclerViewは一覧表示の実装に利用するクラスです。ListViewを使うより、表現力のある、柔軟なユーザーインターフェースを作成できます。一覧表示の実装を理解している必要があります。理解不足の場合、まずはこちらの記事を読んで理解してください。この記事では、以下のような処理を実装します。app実装まずはActivityを実装します。このクラスは、FragmentとDialogFragmentとメニューをコントロールします。}}続いて、Fragmentを実装します。RecyclerViewはFragmentに実装します。登録RecyclerViewで登録処理を実装する場合は、RecyclerView.AdapterクラスのnotifyItemInsertedメソッドを使用します。}}list.indexOfでオブジェクトがないことを確認します。結果が-1の場合は、リストにオブジェクトがないので、リストにデータを新規で追加します。このチェックは、IndexOutOfBoundsException対策の実装です。端末の差異や動作の遅延によるアプリのクラッシュを防ぐことができるようになります。notifyItemInsertedの引数はリストのポジションです。上記は0を設定しているので、RecyclerViewへ0の位置データの変更が通知されます。RecyclerViewにheaderを実装している場合はさらに+1する必要があります。listへの追加位置は0となります。上記のコードの動作を確認してみましょう。insertデータの登録がアニメーションと共に実行されます。更新RecyclerViewで更新処理を実装する場合は、RecyclerView.AdapterクラスのnotifyItemChangedメソッドを使用します。}}list.indexOfでオブジェクトがあることを確認します。結果が-1でない場合は、リストにオブジェクトがあるので、notifyItemChangedでリストの変更をRecyclerViewに通知します。notifyItemChangedの第1引数はポジションです。第2引数はオブジェクトです。ポジションには、list.indexOfの結果を設定します。オブジェクトの内容の変更は、ActivityでもFragmentでもDialogでも、どこで実行しても構いません。notifyItemChangedでRecyclerViewに更新の通知をして、初めてリスト表示は変更されます。上記のコードの動作を確認してみましょう。updateデータの更新が実行されました。削除RecyclerViewで削除処理を実装する場合は、RecyclerView.AdapterクラスのnotifyItemRemovedメソッドを使用します。}}notifyItemRemovedの第1引数はポジションです。list.indexOfで削除するindexの位置を取得します。list.removeで削除結果を取得し、notifyItemRemovedのポジションに、list.indexOfの結果を設定します。上記のコードの動作を確認してみましょう。deleteデータの削除が実行されました。処理をFragmentに集約することです。処理をFragmentに集約するのは、クラスの扱う責任の範囲をはっきりさせるためです。AcitivtyやAdapterで処理を呼びだすのはやめましょう。callbackやPub/Subを使ってFragment内で処理を実行しましょう。notifyItemXXXXの処理の前に、list.indexOfメソッドでオブジェクトの存在をチェックをします。このチェックは、IndexOutOfBoundsExceptionを防ぐための処理です。list.indexOfはオブジェクトの位置を取得できます。この結果で取得したポジションで処理を実行します。クリック時に取得したpositionを使いまわしてはいけません。結論ListViewは、notifyUpdate()だけ利用していれば大丈夫でした。RecyClerViewはnotifyDataSetChanged()メソッドだけではダメで、処理ごとに制御が必要となります。RecyclerViewは覚えることが多いですが、軽量で表現力のあるUIを作成できるので、是非色々なパターンのUIを作成してみてださい。