首页 > 解决方案 > 如何通过 DataBinding 设置 ConstraintLayout Group 的可见性?

问题描述

我的布局中有 2Group秒来控制我的视图的可见性。
但是,我无法通过 DataBinding 设置它们的可见性:

<layout>
    <data>
        <import type="android.view.View"/>
        
        <variable
            name="viewModel"
            type="co.aresid.book13.fragments.trackinglist.TrackingListViewModel"
            />
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout>

        ...

        <androidx.constraintlayout.widget.Group
            android:id="@+id/content_group"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:visibility="@{viewModel.hideLoadingAndShowContent ? View.VISIBLE : View.GONE, default=gone}"
            app:constraint_referenced_ids="tracking_list_recycler_view"
            />
        
        <androidx.constraintlayout.widget.Group
            android:id="@+id/loading_group"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:visibility="@{viewModel.hideLoadingAndShowContent ? View.GONE : View.VISIBLE, default=visible}"
            app:constraint_referenced_ids="progress_circular"
            />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

hideLoadingAndShowContent变量是 a ,它从my 中对应的aLiveData获取其值:MutableLiveDataViewModel

private val _hideLoadingAndShowContent = MutableLiveData<Boolean>()
val hideLoadingAndShowContent: LiveData<Boolean>
    get() = _hideLoadingAndShowContent

LiveData仅在类中设置,ViewModel不会出现在Fragment类中。
Fragment课堂上,我还设置了binding.lifecycleOwner

binding.lifecycleOwner = viewLifecycleOwner

我错过了什么细节?

标签: androidandroid-livedataandroid-databinding

解决方案


我忘了在我的班级中传递ViewModel给布局绑定:Fragment

binding.viewModel = viewModel

推荐阅读