我使用包含布局,并且需要更改其可见性:
<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的过程吗?
答案 0 :(得分:8)
当我们给<include>
一个ID时,它会覆盖我们包含的根目录布局的ID。在您的情况下,layout_provinces
会覆盖<RelativeLayout
的{{1}}。因此,当您访问相对布局时,它会出现错误,因为它不再存在。
您可以做的是删除相对布局的ID,仅给ID以包括和访问通过select_province
方法包括的根布局的方法,如下所示。
Java
getRoot()
科特林
binding.selectProvince.getRoot().setVisibility(View.GONE)
视图绑定中的binding.selectProvince.root.visibility = View.GONE
方法返回给定布局的最高视图,在您的情况下为getRoot()
。
答案 1 :(得分:0)
要使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>