[Android] データバインディングxmlの条件ステートメントを使用してビューの公開を制御する方法


書き込み時間 : 2021-09-01 17:09:34

ViewModelオブジェクトで宣言されたブール型プロパティをxmlに接続して、ビューの露出を制御しましょう。

ViewModel

ViewModelで露出を制御するプロパティを宣言します。
ビューの初期状態を公開しないようにするには、プロパティ値をfalseに設定します。

private val _emptyLayoutVisible = MutableLiveData(false)  
val emptyLayoutVisible: LiveData<Boolean>  
    get() = _emptyLayoutVisible  

XML

ViewModelで宣言されたプロパティ値を使用することにより、xmlの可視性プロパティが条件ステートメントとして処理されます。

<androidx.constraintlayout.widget.ConstraintLayout  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="@color/white"  
    android:visibility="@{viewmodel.emptyLayoutVisible ? View.VISIBLE : View.GONE}"  
    tools:visibility="gone">  
    ...  
</ConstraintLayout>   

露出を制御する

ViewModelで宣言されたプロパティが変更されると、xmlのvisibilityプロパティも変更されます。
以下のコードでは、itemsリストが空またはnullの場合はtrueの値が格納され、itemsリストが空でない場合はfalseの値が格納されます。

 _emptyLayoutVisible.value = _items.value?.isEmpty() ?: true