ViewBinding-如何设置ViewBinding中包含布局的可见性?

时间:2020-04-27 06:52:08

标签: android-layout android-view android-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的过程吗?

2 个答案:

答案 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>
相关问题