我有一个数据绑定布局,其中包含一个框架布局,其中包含其他布局:
<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 :(得分:9)
如果要在包含的布局中使用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一个类似的问题。
答案 1 :(得分:5)
的活动:
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>