2017-04-02 55 views
1

我有一個包含一個幀佈局與其他佈局內的數據綁定佈局:機器人數據綁定<include>佈局的OnClick聽者不到風度工作

<FrameLayout 
    android:id="@+id/global_actions_frame_layout" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.075" 
    android:background="@color/colorToolBar"> 
    <include 
     android:id="@+id/included" 
     layout="@layout/global_actions"> 
    </include> 
</FrameLayout> 

佈局具有這種格式內圖像按鈕:

<ImageButton 
    android:id="@+id/settingsButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_settings_black_36dp" 
    android:layout_gravity="end" 
    android:background="@color/colorToolBar" 
    android:layout_margin="4dp" 
    android:layout_marginLeft="20dp" 
    android:onClick="@{listener::onClickState}" 
android:alpha="0.4"/> 

,我添加了標籤身邊和我一起活動的名稱添加數據

<data> 
    <import type="android.view.View"/> 
    <variable name="listener" type="MyActivity"/> 
</data> 

和MyActivity我調用的函數從圖像按鈕聽取點擊:

public void onClickState(View view){ 
int id = view.getId(); 
} 

但從某種原因,當我點擊 我沒有得到這個功能,我想也

android:onClick="@{listener.onClickState}" 

但沒有幫助.. 任何想法? thx !!

+0

是通過使用在附帶的佈局你結合數據 變量可以被傳遞到一個包含的佈局的綁定從含佈局應用程序名稱空間和變量名屬性: Killer

+0

h ttps://developer.android.com/topic/libraries/data-binding/index.html – Killer

回答

1

活動:

activityMainBinding.included.setListener(this); 

global_actions.xml ::

<layout> 
    <data> 
     <variable type="your.packages.here.MainActivity" name="listener"/> 
    </data> 

    <ImageButton 
    android:id="@+id/settingsButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_settings_black_36dp" 
    android:layout_gravity="end" 
    android:background="@color/colorToolBar" 
    android:layout_margin="4dp" 
    android:layout_marginLeft="20dp" 
    android:onClick="@{listener::onClickState}" 
    android:alpha="0.4"/> 
</layout> 
+0

指定一個id是的,我只是忘記了setListener,現在很好用!!, – batsheva

2

如果你想包含的佈局中使用DataBinding變量,你需要將它們傳遞給所包含的佈局,也使您的父視圖使用DataBinding

<layout> 
    <data> 
     <variable type="your.packages.here.MainActivity" name="listener"/> 
    </data> 

    <FrameLayout> 
     <include 
      android:id="@+id/included" 
      layout="@layout/global_actions" 
      app:listener="@{listener}"/> 
     </include> 
    </FrameLayout> 
</layout> 

你需要設置你的聽衆在MainActivity.class到相應的綁定類:

activityMainBinding.setListener(this); 

,並在包括佈局,您需要使用您在父佈局中使用相同的名稱(app:listener):

<layout> 
    <data> 
     <variable type="your.packages.here.MainActivity" name="listener"/> 
    </data> 

    <ImageButton 
    android:onClick="@{listener::onClickState}"/> 
</layout> 

請看看George Mounts answer到一個類似的問題。

+0

嗨,我不認爲你必須在父母中設置偵聽器,它沒有它的工作,只有在包括佈局..在主要活動我補充說:mBinding.included.setListener(this); – batsheva

+0

是的,這也適用。但是在那種情況下,你需要爲你的'' – yennsarah