2017-07-17 28 views
1

上使用參數類型{type}找到屬性爲'{attribute}'的設置程序在綁定適配器上存在問題。下面的代碼:無法在{View}

@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,如結合銜接

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

,但我得到的編譯時間erroe:

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

我正在使用在BindingAdapter中查看而不是FrameLayout,但是它是允許的,因爲它是FrameLayout的預處理器(並且我之前做過很多次),並且我絕對不會忽略這個erroe的原因。你能幫我一些建議嗎?

更新:

我交換線路

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

,並獲得與應用程序相同的錯誤:menuItemClick。試圖刪除requiredAll = false,但沒有幫助太

回答

1

找到了。我正在使用BindingAdapter android.support.v7.widget.PopupMenu; ,但班級Field正在執行android.widget.PopupMenu.OnMenuItemClickListener;因爲結果BindingAdapter是錯誤的,並且對於佈局中視圖中不同的字段順序。而這個錯誤很自然

相關問題