如何在布局中添加多个文本更改的侦听器?

时间:2017-10-22 17:02:07

标签: java android mvvm data-binding

在代码中我会这样做:

myEditText.addTextChangedListener(firstTextWatcher);
myEditText.addTextChangedListener(secondTextWatcher);

在xml中,这有效:

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

但是这个:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:addTextChangedListener="@{viewModel.firstTextWatcher}"
    app:addTextChangedListener="@{viewModel.secondTextWatcher}"/>

结果:

  

重复属性addTextChangedListener

你知道为什么这是一个问题吗?我正在使用MVVM,所以我想从数据绑定中受益。我知道我可以将这两个TextWatchers合二为一,但是它真的有必要吗?

1 个答案:

答案 0 :(得分:-1)

您还想为EditTexts提供一个ID,可以在XML中完成,如下所示:android:id="@+id/box1"

您希望在Java中执行此操作,而不是在XML文件中执行此操作。以下是您需要的所有代码剪辑,但您必须放置它们!您还需要为第二个EditText复制这些,因为这只是一个:

private EditText box1;

final EditText box1 = (EditText) findViewByID(R.id.box1);

box1.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(final CharSequence txt,int s, int b, int c) {

    }
});

这应该有效。在更改的文字中,int sint bint c是我不确定的。我刚刚使用下面的方法输入:https://developer.android.com/reference/android/text/TextWatcher.html