android.visibilityにvisible,invisible,goneをデータバインドする方法
[Android]android.visibilityにvisible,invisible,goneをデータバインドする方法
views
| comments
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
}
}kotlinこれでViewModelをViewに依存させずに記述できるようになりました。
他にもView.VISIBLEなどがIntであることを利用してIntをbindすればオプショナルにせずともすみそうです。 しかし、意味的にも近くなるのでBoolean?のほうがわかりやすいと思います。
まとめ#
ちょっとしたことですが思いつくまで自分は地味に悩みました。
今回検証に使用したソースは下記にアップしています。 muaaru/testBindingAdapter ↗