【问题标题】:Cannot find the setter for attribute '{attribute}' with parameter type {type} on {View}在 {View} 上找不到参数类型为 {type} 的属性“{attribute}”的设置器
【发布时间】:2017-07-17 09:04:51
【问题描述】:

绑定适配器有问题。代码如下:

@BindingAdapter(value = {"menu", "menuItemClick"}, requireAll = false)
public static void setMenu(View view, int menu, PopupMenu.OnMenuItemClickListener listener) {
    if (menu == 0 || menu == -1) {
        return;
    }

    view.setOnClickListener(v -> {
        PopupMenu popup = new PopupMenu(v.getContext(), view);
        //Inflating the Popup using xml file
        popup.getMenuInflater().inflate(menu, popup.getMenu());
        popup.setOnMenuItemClickListener(listener);
        popup.show();
    });
}

在布局层次结构中查看:

<FrameLayout
            android:layout_width="@dimen/fields_edit_hint_length"
            android:layout_height="52dp"
            android:layout_gravity="end"
            app:menu="@{item.getTypesMenuRes()}"
            app:menuItemClick="@{item}"
            app:visible="@{item.value.length!= 0 &amp;&amp; !item.isFieldLocked()}"/>

方法 getTypesMenuRes 返回 int,就像在 Binding Adapter 中一样

 public int getTypesMenuRes() {
    switch (type()) {
        case PhoneNumber:
            return R.menu.edit_fields_phone_types;
        case Email:
            return R.menu.edit_fields_email_types;
        default:
            return -1;
    }
}

但我得到编译时间错误:

Error:(67, 29) Cannot find the setter for attribute 'app:menu' with parameter type int on android.widget.FrameLayout. 

我在 BindingAdapter 中使用 View 而不是 FrameLayout,但这是允许的,因为它是 FrameLayout 的前身(我之前做过很多次),我绝对不了解这个错误的原因。你能给我一些建议吗?

更新:

我换线了

            app:menu="@{item.getTypesMenuRes()}"
            app:menuItemClick="@{item}"

并使用 app:menuItemClick 得到相同的错误。试图删除 requiredAll = false ,但也没有帮助

【问题讨论】:

    标签: android android-databinding


    【解决方案1】:

    发现了。我正在使用 BindingAdapter android.support.v7.widget.PopupMenu; , 但类 Field 正在实现android.widget.PopupMenu.OnMenuItemClickListener;结果 BindingAdapter 是错误的,并且布局中视图中的字段顺序不同。这个错误很自然

    【讨论】:

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