android– 双向数据绑定:视图缺少用户定义的类型

android– 双向数据绑定:视图缺少用户定义的类型,第1张

概述今天我在AndroidStudio预览版中发现了最近推出的two-waydatabinding功能,并决定尝试一下.我有一个非常简单的布局(下面的代码),用于撰写和发送消息.我想要实现的是当字段中没有输入文本时,按钮“disabled”(以及将来会有相应的图像).<?xmlversion="1.0"encoding="utf-8"?>

今天我在Android Studio预览版中发现了最近推出的two-way data binding功能,并决定尝试一下.

我有一个非常简单的布局(下面的代码),用于撰写和发送消息.我想要实现的是当字段中没有输入文本时,按钮“disabled”(以及将来会有相应的图像).

<?xml version="1.0" enCoding="utf-8"?><layout    xmlns:androID="http://schemas.androID.com/apk/res/androID"><data>    <variable name="msg" type="String"/></data><linearLayout    androID:layout_wIDth="match_parent"    androID:layout_height="wrap_content"    androID:orIEntation="horizontal">    <EditText        androID:ID="@+ID/new_message_input"        androID:layout_wIDth="0dp"        androID:layout_height="wrap_content"        androID:layout_weight="1"        androID:paddingStart="10dp"        androID:hint="@string/hint_compose_message"        androID:inputType="textautoCorrect|textMultiline"        androID:text="@={msg}"/>    <Imagebutton        androID:ID="@+ID/btn_send_message"        androID:layout_wIDth="50dp"        androID:layout_height="match_parent"        androID:src="@drawable/ic_send"        androID:enabled="@{!new_message_input.text.isEmpty()}"        androID:clickable="@{!new_message_input.text.isEmpty()}"/></linearLayout></layout>

第一个链接中的示例代码显示这样的内容应该足够了:

<layout ...>  <data>    <import type="androID.vIEw.VIEw"/>  </data>  <relativeLayout ...>    <CheckBox androID:ID="@+ID/seeAds" .../>    <ImageVIEw androID:visibility="@{seeAds.checked ? VIEw.VISIBLE : VIEw.GONE}" .../>  </relativeLayout></layout>

但是,当尝试为Imagebutton的enabled / clickable属性实现类似的逻辑时,我收到以下错误:

Error:java.lang.RuntimeException: java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:IDentifIErs must have user defined types from the XML file. new_message_input is missing it

问题肯定在于这两行,因为删除它们允许正确创建绑定类.

我的问题是:

>我做错了什么?
>我该如何解决这个问题?

我也尝试过不同的做法,但结果是一样的:

<?xml version="1.0" enCoding="utf-8"?><layout><data>    <import type="androID.Widget.EditText"/>    ...</data><linearLayout  ...  <Imagebutton    ...    androID:enabled="@{!(((EditText)new_message_input).getText().toString().isEmpty())}"    androID:clickable="@{!(((EditText)new_message_input).getText().toString().isEmpty())}"/>

解决方法:

卫生署.

我不记得Data Binding进程将XML ID转换为Binding类中的属性,所有这些都是用较低的camel情况编写的.这意味着为了使用数据绑定从“@ ID / btn_send_message”中引用“@ ID / new_message_input”,我应该使用生成的名称,在本例中是newMessageinput.

这个例子并不是很明显,因为它包含一个VIEw,其@ID已经存在于camelCase中,因此与生成的名称相同 – 因此可以自动运行.

因此解决方案是替换这些线:

    androID:enabled="@{!new_message_input.text.isEmpty()}"    androID:clickable="@{!new_message_input.text.isEmpty()}"/>

有:

    androID:enabled="@{!newMessageinput.text.isEmpty()}"    androID:clickable="@{!newMessageinput.text.isEmpty()}"/>

或者,如果我这样做,我可以完全解决这个问题:

    androID:enabled="@{!msg.isEmpty()}"    androID:clickable="@{!msg.isEmpty()}"/>

在旁注:

如果EditText最初是空的(因此我们希望禁用该按钮),我们应该在布局膨胀时将一个空的String对象附加到视图(通过Java;例如StringUtils.EMPTY),以正确地使按钮不可点击.

总结

以上是内存溢出为你收集整理的android – 双向数据绑定:视图缺少用户定义的类型全部内容,希望文章能够帮你解决android – 双向数据绑定:视图缺少用户定义的类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1113583.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存