[Android]android.visibilityにvisible,invisible,goneをデータバインドする方法
Viewのvisibilityのbinding
ViewModelをViewにbindingした際、Viewのvisibilityを変更できるようにすることは多いかと思います。
たいていはvisible/invisibleやvisible/goneの切り替えだけなのでBooleanを処理するBindingAdapterを作成すれば事足ります。
しかし、visible/invisibleに加えてgoneもbindしたい場合があります。
この場合はBoolean?を使用してvisible/invisibleをtrue/falseに、goneをnullにbindする下記のようなBindingAdapterを作成します。
@BindingAdapter("android:bindVisibleInvisibleGone")
fun View.bindVisibleInvisibleGone(visibilityValue: Boolean?) {
visibility = when (visibilityValue) {
true -> View.VISIBLE
false -> View.INVISIBLE
else -> View.GONE
}
}
これでViewModelをViewに依存させずに記述できるようになりました。
他にもView.VISIBLEなどがIntであることを利用してIntをbindすればオプショナルにせずともすみそうです。
しかし、意味的にも近くなるのでBoolean?のほうがわかりやすいと思います。
まとめ
ちょっとしたことですが思いつくまで自分は地味に悩みました。
今回検証に使用したソースは下記にアップしています。
muaaru/testBindingAdapter