7

我使用包含布局,我需要更改它的可见性:

 <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 过程?

4

2 回答 2

24

当我们给出<include>一个 id 时,它会覆盖我们包含的根布局的 id。在您的情况下,layout_provinces是覆盖<RelativeLayoutselect_province. 因此,当您访问相对布局时,它会给您一个错误,因为它不再存在。

您可以做的是删除相对布局的 id,只给 id 以包含并访问您通过如下getRoot()方法包含的根布局。

爪哇

binding.selectProvince.getRoot().setVisibility(View.GONE)

科特林

binding.selectProvince.root.visibility = View.GONE

View Binding 中的getRoot()方法在您的情况下返回给定布局的最顶层视图,它是RelativeLayout.

于 2020-04-29T05:43:31.907 回答
-1

要使 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>
于 2020-04-27T16:36:42.527 回答