
今天我在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_inputis 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 – 双向数据绑定:视图缺少用户定义的类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)