代码之家  ›  专栏  ›  技术社区  ›  BeardMagician

无法使用数据绑定设置“android:background”属性,获取“object]无法转换为View”错误

  •  0
  • BeardMagician  · 技术社区  · 7 年前

    我有这样一个文本视图:

    <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@{message.isSelf() ? @drawable/bubble_blue : @drawable/bubble_grey}"/>
    

    以及信息。isSelf()只是一个返回布尔值的公共方法。

    但是,我在尝试编译时遇到了以下错误:

    Error:(125, 141) error: incompatible types: Message cannot be converted to View
    

    进入错误的源代码,这是生成的数据绑定中的问题行

    var = ((messageIsSelf) ? (getDrawableFromResource(message, R.drawable.bubble_blue)) : (getDrawableFromResource(message, R.drawable.bubble_grey)));
    

    getDrawableFromResource方法将视图和可绘制ID作为参数:

     /** @hide */
        protected static Drawable getDrawableFromResource(View view, int resourceId) {
            if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
                return view.getContext().getDrawable(resourceId);
            } else {
                return view.getResources().getDrawable(resourceId);
            }
        }
    

    2 回复  |  直到 7 年前
        1
  •  0
  •   BeardMagician    7 年前

    事实证明,这是因为我有一个“message”对象,并且TextView的id被定义为“message”,这导致了冲突。更改id解决了问题。

        2
  •  0
  •   ZooMagic    6 年前
    getDrawableFromResource(message, R.drawable.bubble_grey)));
    

    在上述方法中,您发送一个 Message message 是一个 消息 对象),但该方法需要 View 对象(根据您提供的代码)。这就是为什么会出现这种错误。

    尝试使用 @android:drawable 注释:

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@{message.isSelf() ? 
                           @android:drawable/bubble_blue : 
                           @android:drawable/bubble_grey}"
    />