2017-04-20 80 views
0

我尝试动态地设置在我的应用程序View.GONE将无法正常工作

<?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); 
+1

请张贴你如何膨胀这种布局。 – subhash

+0

我已添加代码 – wutzebaer

+1

您应该将其更改为,查看v = DataBindingUtil.inflate(vi,listItemResource,null).getRoot();像这样: – subhash

回答

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

该进口标签的工作原理,当你有条件检查(如true或false),而不是直接

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

我有一个条件,但我简化了我的问题的例子 – wutzebaer

+0

你可以把你的问题的代码? –

1

如果您正在使用数据绑定RecyclerView或片段转接器内的项目,你可能更愿意使用:

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

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

然后

View v = binding.getRoot() 

你可以通过这个article

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对象。