数据绑定不适用于Android

时间:2017-01-13 17:24:58

标签: android data-binding onclicklistener android-databinding 2-way-object-databinding

我正在使用数据绑定库,我得到了它,但是有些问题我似乎无法获得。对于初学者

这是我的xml布局activity_login.xml

的一部分
 <data>

    <variable
        name="viewModel"
        type="com.ViewModel.LoginViewModel" />

</data>
<EditText
                android:id="@+id/edit_text_username_register"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/username"
                android:imeOptions="actionNext"
                android:inputType="text"
                android:textSize="15sp"
                android:theme="@style/EditTextTheme"
                app:addTextChangedListener="@{viewModel.getUsername}" />

我的ViewModel包含

    public TextWatcher getUsername() {
    return new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.i("username", s.toString());
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    };
}

上面的代码是在用户输入时获取用户名。是否使用数据绑定的正确方法或我做错了?上面的代码完美无缺。 问题是,当我尝试按照我在网上找到它的方式来添加

android:addTextChangedListener="@{viewModel.getUsername}"

它不起作用,我得到一个警告说未知属性,如果我尝试编译它我得到一个数据绑定不存在错误。我也使用一个包含2个单选按钮的radiogroup,我想取一个被选中的使用数据绑定。我发现使用android:onCheckedChanged的在线资源我尝试使用但我再次收到错误说绑定不存在和未知属性

1 个答案:

答案 0 :(得分:0)

InverseBindingMethod在这里是个好东西,请举一个例子。

<强>类

public class Handlers {
    public void onKeywordChanged(CharSequence s, int start, int before, int count) {
           // Your code here
    }
}

<强>布局

<layout>
     <data>
        <variable name="handlers"
             type="my.package.Handlers" />
     </data>

     ...
     <EditText
       ...
        android:onTextChanged="@{handlers::onKeywordChanged}"
     />
</layout>

了解更多信息https://developer.android.com/reference/android/databinding/InverseBindingMethod.html