Float Label提示(TextInputLayout)不适用于Android数据绑定

iam*_*oid 7 data-binding android android-textinputlayout android-databinding

我需要在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>
Run Code Online (Sandbox Code Playgroud)

但浮动标签不起作用.我开始逐行评论以找出原因.当我评论线时,浮动标签变得有效

android:hint="@{item.getHint()}
Run Code Online (Sandbox Code Playgroud)

(并用硬编码文本替换它).根据字段类型getHint()返回R.string.{something}.

在那里我发现了比以编程方式设置提示产生浮动标签消失.我不能使用静态布局(而不是回收者视图),因为字段列表可能会出现dynsmically(例如:我在字段中写入电话号码,而在其后为其他电话号码插入空电话字段).

有没有办法以相同的方式创建浮动标签(通过使用字段类型定义提示)?

小智 13

我有同样的问题.

解决方案是使用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>
Run Code Online (Sandbox Code Playgroud)


Geo*_*unt 0

问题是,当没有分配任何内容时,将给出 0 作为资源 ID。您可能会在 logcat 中看到这样的异常:

android.content.res.Resources$NotFoundException: String resource ID #0x0
Run Code Online (Sandbox Code Playgroud)

在第一次计算表达式之前,您可能尚未为该项目分配值。如果要确保资源未设置为 value ,则应在创建绑定后立即分配该项目0

MyBinding binding = MyBinding.inflate(inflater, parent, true);
binding.setItem(item);
Run Code Online (Sandbox Code Playgroud)