我正在使用数据绑定库,我得到了它,但是有些问题我似乎无法获得。对于初学者
这是我的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的在线资源我尝试使用但我再次收到错误说绑定不存在和未知属性
答案 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