2017-04-20 137 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對象。