閉じる

データバインディングと setTag

「XXXXBinding Binding=XXXXBinding.inflate(inflater);」とやって得た Bindingから getRoot()で得られる Viewの Tagには既に Bindingが設定されていて、これを独自のデータで上書きしてはいけない。
内部的に上書きされない前提になっているようで、KitKat以降*1 以上の環境だと落ちる。
ちなみに設定されている Bindingを得るには「(XXXBinding)view.getTag()」ではなく「XXXBinding b=DataBindingUtil.getBinding(view)」が正解。*2

アプリケーション独自のデータを設定する必要があるならば setTag(int key,Object)*3 を使うこと。
keyは重複を避けるため固定値を用意するのではなくてリソースで用意して適当に採番*4 してもらうのが吉。


*1 API19以上

*2 API Levelで setTag(Object)と setTag(int,Object)を使い分けている

*3 API 4以降だけど、今時これに引っかかる開発案件はないでしょ

*4 「<item name=”hoge” type=”id”/>」

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)