【发布时间】: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 && !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