View.GONE通过数据绑定将无法正常工作

时间:2017-04-20 15:24:06

标签: android android-databinding

我尝试在我的应用中动态设置可见性

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <import type="android.view.View" />
    </data>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="?android:attr/activatedBackgroundIndicator"
        android:minHeight="@dimen/list_item_height"
        android:orientation="horizontal"
        android:padding="@dimen/bordersize_big">

        <ImageView
            android:id="@+id/listitem_icon"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_weight="0"
            android:minWidth="@dimen/fingersize"
            android:src="@drawable/selector_icon_filecard"
            android:visibility="@{View.GONE}"
            tools:ignore="ContentDescription">

但是图像仍然可见,如果我设置android:visibility="gone"它已经消失了,我的数据绑定出了什么问题?

LayoutInflater vi = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = vi.inflate(listItemResource, null);

3 个答案:

答案 0 :(得分:1)

如果您在RecyclerView或Fragment适配器中使用数据绑定项,您可能更喜欢使用:

ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);

ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);

然后

View v = binding.getRoot()

您可以查看此article

答案 1 :(得分:0)

我所有的项目都不使用数据绑定,因为它是多余的。您不需要导入View类以在一个布局中应用可见性,您可以直接执行:

 <ImageView
            android:id="@+id/listitem_icon"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_weight="0"
            android:minWidth="@dimen/fingersize"
            android:src="@drawable/selector_icon_filecard"
            android:visibility="gone"
            tools:ignore="ContentDescription">

正如您在官方文档中看到的那样:https://developer.android.com/topic/libraries/data-binding/index.html

当您有条件要检查(如真或假)时,此导入标签有效,而不是直接

<TextView
   android:text="@{user.lastName}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>

答案 2 :(得分:0)

如果你想使用

 LayoutInflater vi = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View v = vi.inflate(listItemResource, null);

确保将其绑定在ViewHolder构造函数中,假设您的布局名称为list_item

ListItemBinding binding = DatabindingUtil.bind(v);

此处v是您为布局创建的View对象。