【Android】LiveData+DataBinding+ViewModelでListView作成


ListViewやRecycleViewの作成は手順がそれなりに多く忘れがちになります。
ただ最近はLiveDataやDataBindingが出てきて少し楽になりました。
私は現時点でこんな感じで作っていますが、もっと良い方法があると思うので随時ブラッシュアップしていきたいです。

※Activityクラスとレイアウト、Fragmentクラスとレイアウト、ViewModelクラスがあることが前提です。無い場合は別途用意が必要です。

①Fragmentのレイアウトをlayoutタグで囲む

DataBindingを使用するために必要です。

②バインディング変数にViewModelを定義

dataタグ内のvariableタグ部分です。

③レイアウトにListView追加

④リストに表示する内容でデータクラスを作成

⑤ListView1行分のレイアウトを作成する

■Fragmentと同じ様にレイアウトlayoutタグで囲みます。
■バインディング変数には④のデータクラスを定義します。
■TextViewのtextはDataBindingで渡します。

⑥リストに表示するデータを入れるLiveDataを用意

⑦リストに表示するデータを作成しLiveDataに追加するメソッド作成

⑧ListView用のAdapter作成

■⑤のレイアウトで定義したバインディング変数にはAdapterに渡ってきたデータクラスを入れます。
■executePendingBindings()メソッドで入れたデータをBindingオブジェクトに即反映させます。

⑨Fragmentの.onActivityCreated()メソッドで⑧のAdapterをListViewにセット

⑩Activityで⑥で用意したLiveDataをsubscribe

⑪FragmentのonResume()メソッドで⑦のメソッドを呼びLiveDataにデータを入れる

⑫LiveDataにデータが入ったらsubscribeしているActivityにデータ変更の通知が届くのでAdapterに渡す

これでアプリの画面にデータ含まれたListViewが表示されます。

その後ListViewの内容を変えたい場合は、表示したいデータを⑥のLiveDataに入れてあげればOKです。


コメント