无法设置" android:background"属性与数据绑定,得到一个"对象]无法转换为View"错误

时间:2017-10-15 17:00:51

标签: android android-layout data-binding android-databinding

我有像这样的Textview:

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

message.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将View和drawable 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 个答案:

答案 0 :(得分:0)

getDrawableFromResource(message, R.drawable.bubble_grey)));

在上面的方法中,您发送一个Message对象(我假设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}"
/>

答案 1 :(得分:0)

事实证明它是因为我有一个“消息”对象和TextView的id定义为“消息”导致冲突。改变id解决了这个问题。