我尝试在我的应用中动态设置可见性
<?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);
答案 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
对象。