如何在Android xml

时间:2017-10-21 11:41:51

标签: java android android-databinding

我试着像这里一样做: https://gist.github.com/susemi99/a45ca534cc109271f34e6c992f69f048

所以我在xml中有我的EditText:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
    <import type="test.edu.MyViewModel"/>
    <variable type="MyViewModel" name="viewModel"/>
</data>

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

(...)

<EditText 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:addTextChangeListener="@{viewModel.myTextWatcher}"/>

(...)

我在MyViewModel中有TextWatcher:

public class MyViewModel extends BaseObservable {
    public TextWatcher myTextWatcher = 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) {}

        @Override
        public void afterTextChanged(Editable editable) {}
    };
}

我认为我已经完成了与上述链接相同的工作,但是当我尝试编译时,我得到了:

  

在android.widget.EditText上找不到参数类型为android.text.TextWatcher的属性'app:addTextChangeListener'的setter。

你能不能给我一些关于这里有什么问题的提示?我假设我提到的代码正在编译,但我不是100%肯定。

2 个答案:

答案 0 :(得分:1)

我终于想通了......这只是一个错字。而不是addText 已更改监听器我有addText 更改监听器,说实话,错误消息不是很有帮助。现在,当我知道解决方案时,它很明显,但之前我正在检查“app”命名空间,一些@Bind注释,gradle选项和类似的东西。也许这只是我,但我认为这会更容易出错,如:

  

android.widget.EditText没有函数addTextChangeListener

答案 1 :(得分:0)

您可以尝试这种方式:

    EditText editText =(EditText)findViewById(R.id.editText1);
    editText.addTextChangeListener(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) {}

        @Override
        public void afterTextChanged(Editable editable) {}
    };

而不是将其写在xml文件中