data-binding

Android LiveDataの2-way バインディングが動かなくて2日潰した

投稿日:

久しぶりにAndroidの最新技術をキャッチアップ中です。

RxJavaやKotlin、Architecture components、AndroidXなどなど。まだまだ新しい物が増えているようです。。

まず、自分のアプリにRxJava(RxKotlin)を導入しています。また、なんちゃってMVVMだったのですが、最近はAndroidがViewModelを採用しているようなので、最新のデファクタに寄せてみようと思ってました。

早速詰まったのが、LiveDataの2wayバインディング。いままではDataBindingを利用していたのですが、ViewModelとは、LiveDataが相性がいい模様。さらにAndroid Studio 3.1(?)から、DataBindingとLiveDataが連携できるようになったとのこと。

早速、バインディングしてみたのですが1wayはうまくいくのですが、2wayが動かないです。どのようなUIかというと、単純なEditTextとButtonがあって、EditTextが空でなければ、Buttonがenabled=true。空の場合、enabled=falseとしたいのです。

RxJavaの不慣れとあわせて、ここで2日も潰すはめに。。。

レイアウトイメージは、シンプルにこんな感じ

ViewModelはこんな感じです。書き換えているので、コンパイルなどは気にしてません。

さて、なぜ動かないのか。。。

結論は公式ドキュメントをちゃんと読みなさいということです。

The @={} notation, which importantly includes the “=” sign, receives data changes to the property and listen to user updates at the same time.

developer.android.com

この辺の新しい技術は公式ドキュメントのバージョン管理もわけわからないことになっているのですが、ちゃんと読みましょう。

普通のバインディングは@{xxx}としますが、2wayにしたい場合は@={xxx}と=(イコール)が必要です。なんかもっとわかりやすい表記にしてくれたらいいのに、、、。







-data-binding
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スパム対策に簡単な計算にご協力ください。 *

関連記事

no image

Android data-bindingでListViewのセルが表示されない

Androidのdata-bindingを使用してアプリ開発をしているのですが、ListViewのbindが上手くできてないのか、セルになにも表示されません。BaseAdapterを継承したカスタムa …




アプリをリリースしました!まだまだ機能や情報も足りてませんがよろしくお願いします。

サイクリングマップ

Google Play で手に入れよう

kitatamittakaと申します。IT系で詰まったことを自分のためと、ひょっとしたら誰かのために残そうと思います。

仕事

プログラミング好きのSE
仕事でプログラミングすることはあまりありません。

趣味

IT全般
新しい技術やガジェットに興味があります。
ロードバイク
別のブログを書いています。
SEがロードバイクに乗る
古代ローマの歴史
ローマ人の物語を読みました
映画
好きなのはガタカ、ペイフォワードなど
ブログランキング・にほんブログ村へ

モッピー!お金がたまるポイントサイト