バインディングアダプタに問題があります。ここでは、コード:レイアウト階層で{type}のパラメータタイプ{type}の属性 '{attribute}'のセッターが見つかりません
@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が
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;
}
}
バインドアダプタのように、intを返しますが、私は時間erroeをコンパイルし得る:
Error:(67, 29) Cannot find the setter for attribute 'app:menu' with parameter type int on android.widget.FrameLayout.
私は使用していますBindingAdapter内のFrameLayoutの代わりにViewを表示しますが、これはFrameLayoutのプリプロセッサであるため(これは何度もやったことがあります)、このエラーの理由を絶対に無視しません。私に何かアドバイスできますか?
更新:
私はライン
app:menu="@{item.getTypesMenuRes()}"
app:menuItemClick="@{item}"
を切り替えるとアプリと同じエラーを取得しています:menuItemClickを。 requiredAll = false
を削除しようとしましたが、役に立たなかった