【问题标题】:Cannot find the setter for attribute 'android:onClick' with parameter type lambda on android.widget.RelativeLayout在 android.widget.RelativeLayout 上找不到参数类型为 lambda 的属性“android:onClick”的设置器
【发布时间】:2017-12-15 07:30:50
【问题描述】:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
    <variable name="user"
        type="com.daimler.user.persistence.User"/>
    <variable name="callback"
        type="com.daimler.user.ui.UserClickCallback"/>
</data>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/selectableItemBackground"
    android:clickable="true"
    android:paddingBottom="@dimen/row_padding"
    android:paddingLeft="@dimen/activity_margin"
    android:paddingRight="@dimen/activity_margin"
    android:paddingTop="@dimen/row_padding"
    android:onClick="@{() -> callback.onUserClick(user)}">

public class UserClickCallback {

   public void onUserClick(User v) {

   }
}

我写了这样的代码,看起来没问题,但显示错误:

错误:(36, 28) 找不到属性 'android:onClick' 的设置器 在 android.widget.RelativeLayout 上使用参数类型 lambda。

有人帮忙吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    改变这一行。希望对您有所帮助。

    android:onClick="@{() -> callback.onUserClick(user)}">
    

    android:onClick="@{(view) -> callback.onUserClick(user)}">
    

    【讨论】:

    • 如果此答案有助于解决您的问题,请通过右勾号接受此答案作为正确答案
    • 我认为这不应该是一个正确的答案。上述代码具有相同的效果。
    • 无论 lambda 中是否有参数,它都应该并且确实有效。
    【解决方案2】:

    我遇到了同样的问题。 我删除了“.gradle”文件夹并点击了“Rebuild Project”。

    它对我有用。

    【讨论】:

    • 我希望我能投票给你 100 次。我有 50 个错误,我找不到确切的一个。删除 .gradle 后,它指出了我的确切错误。
    • 上面的相同评论:D
    【解决方案3】:

    我得到了答案。默认绑定适配器不起作用,所以我添加了 app:onclick 绑定:

    @BindingAdapter({"app:onClick"})
    public static void setOnClick(View view, View.OnClickListener clickListener) {
        view.setOnClickListener(clickListener);
        view.setClickable(true);
    }
    

    然后我像这样更改了xml:

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/selectableItemBackground"
    android:clickable="true"
    android:paddingBottom="@dimen/row_padding"
    android:paddingLeft="@dimen/activity_margin"
    android:paddingRight="@dimen/activity_margin"
    android:paddingTop="@dimen/row_padding"
    app:onClick="@{() -> callback.onUserClick(user)}">
    

    【讨论】:

    • 是的,到目前为止我找不到其他解决方案。
    【解决方案4】:

    将“android:onClick”更改为“android:onClickListener”,它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2019-06-07
      • 2017-03-04
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      相关资源
      最近更新 更多