LoginSignup
54
54

More than 5 years have passed since last update.

控えめに言ってBindingAdapterが最高だからみんな使おうぜって話

Last updated at Posted at 2016-06-02

みんなDataBinding使ってますか?
ぼくはそろそろこれからのAndroidネイティブには必須にしていきたい気持ちでいっぱいです。

DataBindingはBindableメソッドやObservableFieldなどを使って、BaseObservableを継承したクラスからViewに直接値を教えることができます。
findViewByIdしなくていいよやったね!という記事がいっぱいでましたね。

今回はDataBindingの中でも最高なBindingAdapterってやつを紹介します。

BindingAdapter is 何

すさまじく雑にいうと、「Binding先をAdapterしてくれる何か」です。
Adapterパターンのソレだと考えてもらって多分大丈夫です。

ひとまず実際に使ってみましょう。

それっぽいサンプル

仮にListViewにListなパラメータを突っ込んでリストを表示するものをつくるとします。
まず、List<Hoge>を返すBindableメソッドをBaseObservableなクラスに作成します。

public class Clazz extends BaseObservable {

...

    @Bindable
    public List<Hoge> getHogeList() {
        List<Hoge> hogeList = new ArrayList<>();
        // なんか適当にデータ作る
        return hogelist;
    }

}

ListViewにセットするカスタムArrayAdapterを作成します。
いつものやつですね。

CustomArrayAdapter
public class CustomArrayAdapter extends ArrayAdapter<ListHoge> {
    ...
}

次に、アプリケーションパッケージ直下に適当なファイル名でBindingAdapterを作成していくjavaクラスを作成します。
アプリケーションパッケージ直下にあることが重要なので、変な場所に置いたら動きません。

BindingAdapterUtils

public class BindingAdaptrerUtils {
    @BindingAdapter({hoge})
    public static void setHogeListAdapter(ListView listView, List<Hoge> hogeList) {
        listView.setAdapter(new CustomArrayAdapter(context, hogeList))
    }
}

ここまで準備すると、あとはレイアウトxmlのListViewにこのBindingAdapterを紐付けるだけです。

content_sample
    <date>
        <variable
            name="item"
            type="jp.tacksman.sample.Clazz"
        >
    </data>
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:hoge="@{item}"
    >

はい、これで出来上がりです。
BindingAdapterUtilsの@BindingAdapter({"hoge"})に書いた"hoge"をアトリビューションとして、Adapterをセットするという流れです。

ファットなdataタグから解放されよう

BindingAdapterを導入することで個人的に最高だと思ってるところは、ActivityからAdapterという文字を抹殺できるところかなと思ってます。

setAdapterは勝手にやってくれる上に、BaseObservableなクラスをレイアウトにセットしてやれば、欲しいデータはそこのBindableメソッドから手に入れればよくなります。

これで、AdapterやListenerで膨れ上がりがちなdataタグから解放されます。

しめ

というわけでBindingAdapterのさっくりしたお話でした。
控えめに言って最高なので、DataBindingとBindingAdapterをみんないっぱい使っていこうな!

54
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
54