Java中的双向数据绑定(以编程方式)

时间:2016-12-28 08:23:00

标签: java android android-databinding 2-way-object-databinding

以下代码通过双向绑定方法将user.firstName定义为EditText

<EditText android:text="@={user.firstName}" .../>

无论如何,如何通过双向绑定方法以编程方式在Java代码中将user.firstName设置为EditText

例如;

editText.setTextbyTwoWay(user.fisrtName);

P.S:我忘了描述EditText是以编程方式在 Java代码中创建的。这就是为什么我必须在EditText的Java代码中为此two-way binding定义文本值

1 个答案:

答案 0 :(得分:0)

您可以在Observable.OnPropertyChangedCallback.onPropertyChanged()TextWatcher.afterTextChanged()回调中执行此操作。但这是一个非常广泛的实现,并且完全可以在数据绑定中完成。

因此,您应该考虑仍然以编程方式定义的视图使用数据绑定。尽可能在布局中定义,然后使用数据绑定对其进行充气。可以在膨胀的视图上进行进一步的自定义。

<layout xmlns:android="http://schemas.android.com/apk/res/android>
    <data>
        <variable name="user" type="my.User" />
    </data>
    <EditText
        android:id="@+id/edit_text"
        android:text="@={user.firstName}"
        [...] />
</layout>

现在您只需要添加绑定根视图而不是EditText

EditTextBinding binding = EditTextBinding.inflate(getLayoutInflater());
EditText editText = binding.editText;
View viewToAdd = binding.getRoot();