2017-06-14 63 views
0

您好我已經做了佈局與幾個ImageViewTextView元素由於減少代碼重複。 我出現了兩個問題:Android數據綁定和包含的佈局不會更新可見性

  1. 我需要更新使用數據綁定佈局內這些元素,但我不知道我怎麼能訪問它們,以更新的圖像和文本?
  2. 佈局的可見性應該從VM對象綁定(默認可見性爲GONE),但它不起作用。即使我更新VM設置程序的可見性,佈局也會一直顯示在屏幕上。

的代碼:

包括佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:id="@+id/details" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:background="#FF0000"> 

     <ImageView 
      android:id="@+id/image_details" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:id="@+id/text_details" 
      android:text="details" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/favorites" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:background="#00FF00"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:text="details" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/record" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:background="#0000FF"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:text="details" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/remind_me" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:background="#FF0000"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:text="details" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/return_to_begin" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:background="#00FF00"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:text="details" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 


</LinearLayout> 

活動佈局(這是一個代碼段,將整個XML太大)

<include layout="@layout/manu_layout" 
      android:layout_above="@+id/info" 
      android:layout_alignParentRight="true" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:visibility="@{vm.infoMenu}"/> 

視圖模型方法可見性:

public void setInfoMenu() { 
     if(menuVisibility == View.VISIBLE){ 
      menuVisibility = View.GONE; 
      setMediaControlView(false); 
     }else { 
      menuVisibility=View.VISIBLE; 
      setMediaControlView(true); 

     } 
     notifyPropertyChanged(BR.infoMenu); 
    } 
    @Bindable 
    public int getInfoMenu(){ 
     return menuVisibility; 
    } 

如果您需要任何額外的代碼段,請讓我知道。

你能幫我解決這些問題嗎?

感謝,

Hogar的

+0

您可以請發表您的代碼的兩點? –

+0

當然,給我一分鐘 – hogar

回答

1

請確保您有<layout>爲XML文件的根標籤,如果你想使用數據綁定。

你可以有一個你的<include>的身份證,並通過它認可包含的佈局控制。例如,您的ID爲'包含'您的<include>,那麼您可以訪問它binding.included.detailsbinding.included.favourite

+0

我使用作爲根元素,這不是問題。問題是我不知道如何訪問包含佈局的每個'textView'或'imageView'。 例如,假設我們需要更新圖像和文本...我需要使用哪個屬性更改這些視圖?也許我沒有正確解釋我的問題? – hogar

+1

是的,這就是我告訴你的,通過ID訪問它,就像我在回答'binding.included.details'中解釋過的那樣。確保你包含的佈局也應該有''作爲根標籤。也請參閱[this](https://stackoverflow.com/a/32958608/3134215)。 –

+0

啊哈,謝謝哥們:)會試試這個,讓你知道結果 – hogar