android 数据绑定(bind) <include> 布局 OnClick 监听器不起作用

标签 android android-databinding

我有一个数据绑定(bind)布局,其中包含带有 <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"/>

然后我在它们周围添加了标签,并添加了带有 Activity 名称的数据

 <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}"

但没有任何帮助。

最佳答案

如果你想在包含的布局中使用DataBinding变量,你需要将它们传递给包含的布局,同时让你的父 View 使用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 中将监听器设置为相应的绑定(bind)类:

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一个类似的问题。

关于android 数据绑定(bind) <include> 布局 OnClick 监听器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43166731/

相关文章:

android - 添加带抽屉导航的操作栏按钮?

java - Android DataBinding、onItemrangeMoved - 条目 block 何时在列表中移动?

android - 数据绑定(bind) - 无法复制完整内容

android - gradle 3.2.1 的数据绑定(bind)问题

android - 如何在数据绑定(bind)中不将参数传递给具有默认值的参数

java - Android 数据绑定(bind)导致包含布局出现问题

java - Android studio-为按钮添加样式

android - Android/iOS 代码审计

java - 不使用 Launchy 启动我的 GoogleGlass 应用程序

android - 如何使用前一个 fragment 的 EditText 输入更改 fragment 中的 TextView?