ViewBinding - 如何在 ViewBinding 中设置包含布局的可见性?
ViewBinding - How to set visibility for include layout in ViewBinding?
我使用包含布局,我需要更改它的可见性:
<include
android:id="@+id/layout_provinces"
layout="@layout/layout_select_provinces"
/>
和layout_select_provinces是这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/select_province"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:visibility="gone">
<LinearLayout
android:id="@+id/layout_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background_color"
android:orientation="vertical">
<TextView
android:id="@+id/txt_state"
style="@style/FontIranBold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginRight="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_8sdp"
android:text="@string/txt_select_province"
android:textSize="@dimen/font_size_small" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/_1sdp"
android:background="@color/gray_special" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_estate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layout_top"
android:layout_marginTop="@dimen/_8sdp" />
但是当我将 Id 设置为 RelativeLayout 时,我的应用程序崩溃并且我无法更改可见性:
binding.layoutProvinces.selectProvince.setVisibility(View.GONE);
有没有人可以帮我处理 ViewBinding 设置 id 的过程?
要使 DataBinding 正常工作,您需要将 <layout>
标记作为根标记。因此,将 xml 代码包装在 <layout>
中,如下所示:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
android:id="@+id/select_province"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:visibility="gone">
<LinearLayout
android:id="@+id/layout_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background_color"
android:orientation="vertical">
<TextView
android:id="@+id/txt_state"
style="@style/FontIranBold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginRight="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_8sdp"
android:text="@string/txt_select_province"
android:textSize="@dimen/font_size_small" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/_1sdp"
android:background="@color/gray_special" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_estate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layout_top"
android:layout_marginTop="@dimen/_8sdp" />
</RelativeLayout>
</layout>
当我们给 <include>
一个 id 时,它会覆盖我们包含的根布局的 id。在您的例子中,layout_provinces
覆盖了 <RelativeLayout
的 select_province
。因此,当您访问相对布局时,它会给您一个错误,因为它不再存在。
您可以做的是删除相对布局的 id,只提供 id 以包含和访问您通过 getRoot()
方法包含的根布局,如下所示。
Java
binding.selectProvince.getRoot().setVisibility(View.GONE)
Kotlin
binding.selectProvince.root.visibility = View.GONE
View Binding 中的 getRoot()
方法 returns 在您的情况下给定布局的最顶层视图是 RelativeLayout
。
我使用包含布局,我需要更改它的可见性:
<include
android:id="@+id/layout_provinces"
layout="@layout/layout_select_provinces"
/>
和layout_select_provinces是这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/select_province"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:visibility="gone">
<LinearLayout
android:id="@+id/layout_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background_color"
android:orientation="vertical">
<TextView
android:id="@+id/txt_state"
style="@style/FontIranBold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginRight="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_8sdp"
android:text="@string/txt_select_province"
android:textSize="@dimen/font_size_small" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/_1sdp"
android:background="@color/gray_special" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_estate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layout_top"
android:layout_marginTop="@dimen/_8sdp" />
但是当我将 Id 设置为 RelativeLayout 时,我的应用程序崩溃并且我无法更改可见性:
binding.layoutProvinces.selectProvince.setVisibility(View.GONE);
有没有人可以帮我处理 ViewBinding 设置 id 的过程?
要使 DataBinding 正常工作,您需要将 <layout>
标记作为根标记。因此,将 xml 代码包装在 <layout>
中,如下所示:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
android:id="@+id/select_province"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:visibility="gone">
<LinearLayout
android:id="@+id/layout_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/background_color"
android:orientation="vertical">
<TextView
android:id="@+id/txt_state"
style="@style/FontIranBold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/_8sdp"
android:layout_marginRight="@dimen/_4sdp"
android:layout_marginBottom="@dimen/_8sdp"
android:text="@string/txt_select_province"
android:textSize="@dimen/font_size_small" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/_1sdp"
android:background="@color/gray_special" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_estate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/layout_top"
android:layout_marginTop="@dimen/_8sdp" />
</RelativeLayout>
</layout>
当我们给 <include>
一个 id 时,它会覆盖我们包含的根布局的 id。在您的例子中,layout_provinces
覆盖了 <RelativeLayout
的 select_province
。因此,当您访问相对布局时,它会给您一个错误,因为它不再存在。
您可以做的是删除相对布局的 id,只提供 id 以包含和访问您通过 getRoot()
方法包含的根布局,如下所示。
Java
binding.selectProvince.getRoot().setVisibility(View.GONE)
Kotlin
binding.selectProvince.root.visibility = View.GONE
View Binding 中的 getRoot()
方法 returns 在您的情况下给定布局的最顶层视图是 RelativeLayout
。