我需要在app中创建字段编辑页面。有编辑联系人的EditText列表。对于每种字段类型,我都有一个布局。例如 - 对于名称和姓氏,它是浮动标记的编辑文本。对于Facebook - 简单的编辑文本与图标。我正在使用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}
。
在那里我发现了比以编程方式设置提示产生浮动标签消失。我不能使用静态布局(而不是回收者视图),因为字段列表可能会出现dynsmically(例如:我在字段中写入电话号码,而在其他电话号码后插入空电话字段)。
有没有办法以相同的方式创建浮动标签(通过使用字段类型定义提示)?
答案 0 :(得分:10)
我遇到了同样的问题。
解决方案是使用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>
答案 1 :(得分:0)
问题在于,当没有分配任何内容时,将给出0作为资源ID。您可能在logcat中看到这样的异常:
android.content.res.Resources$NotFoundException: String resource ID #0x0
在第一次评估表达式之前,您可能没有为项目分配值。如果要确保资源未设置为值0
,则应在创建绑定后立即分配项目。
MyBinding binding = MyBinding.inflate(inflater, parent, true);
binding.setItem(item);
答案 2 :(得分:0)
FerdyRod 给出的答案是正确的。
问题在于,当创建TextInputLayout时,它将尝试从其EditText中读取提示,并且从现在开始,它将不再读取该提示。 TextInputLayout
...
// If we do not have a valid hint, try and retrieve it from the EditText
if (TextUtils.isEmpty(mHint)) {
setHint(mEditText.getHint());
// Clear the EditText's hint as we will display it ourselves
mEditText.setHint(null);
}
因此,数据绑定的确在更新提示,但TextInputLayout不再读取错误的提示(EditText提示)