他のレイアウトの<include>
を含むフレームレイアウトを含むデータバインディングレイアウトがあります。
<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}"
しかし、何も助けにはなりませんでした。
アクティビティ:
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>
インクルードレイアウトで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の回答 をご覧ください。