Float标签提示(TextInputLayout)不适用于Android数据绑定
问题描述:
我需要在应用程序中创建字段编辑页面。有编辑联系人的EditText列表。对于每个字段类型我有一个布局。例如 - 对于名称和姓氏,它是浮动标签的编辑文本。对于脸书 - 用图标简单编辑文字。我与Android的数据创建这个列表绑定库Float标签提示(TextInputLayout)不适用于Android数据绑定
我创建布局
<data>
<variable
name="item"
type="app.core.db.model.Field" />
</data>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="65dp"
app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
app:theme="@style/EditFieldFloatLabeled">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:hint="@{item.getHint()}"
android:imeOptions="actionNext"
android:maxLines="1" />
</android.support.design.widget.TextInputLayout>
</FrameLayout>
但浮动标签不工作。我开始逐行评论找出原因。当我评论线时,浮标变成了工作
android:hint="@{item.getHint()}
(并用硬编码文本替换它)。 getHint()
根据字段类型返回R.string.{something}
。
那里我发现比编程设置提示产生浮标签消失。我不能使用静态布局(而不是回收视图),因为字段列表可以动态地增加(例如:我正在写字段中的电话号码,空白的电话字段后面插入其他电话号码)。
有没有办法以同样的方式创建浮标(通过定义提示与字段类型)?
答
问题是,当没有分配任何东西时,0将作为资源ID给出。你可能会看到这样的异常在你的logcat:
android.content.res.Resources$NotFoundException: String resource ID #0x0
很可能是你没有表达的第一次评估前分配一个值的项目。如果要确保资源未设置为值0
,则应在创建绑定后立即分配项目。
MyBinding binding = MyBinding.inflate(inflater, parent, true);
binding.setItem(item);
答
我有同样的问题。
解决方案是使用TextInputLayout上的数据绑定来设置提示。
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="65dp"
android:hint="@{item.getHint()}"
app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
app:theme="@style/EditFieldFloatLabeled">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:imeOptions="actionNext"
android:maxLines="1" />
</android.support.design.widget.TextInputLayout>
修复了我的问题。但为什么会发生? – mitsest