むあーるの雑記

Back

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

android.visibilityにvisible,invisible,goneをデータバインドする方法
https://note.muaaru.com/blog/2021-08-08-post-519
Author muaaru
Published at 2021年8月8日