Android 在后文本更改事件中获取可编辑id

Android 在后文本更改事件中获取可编辑id,android,events,text,Android,Events,Text,我有一个活动扩展TextWatcher以检测某些EditText中的更改,因此它实现: public void afterTextChanged(Editable s) 我的问题是:如果有多个EditText具有.addTextChangedListener(此)集,在后文本更改过程中,如果给定可编辑对象,我如何区分哪一个已更改?请参见基本上创建您自己的类,以使用构造函数处理侦听器,该构造函数定义您监视的edittext并传递您分配的edittext。另一个选项,匿名内部类更少,只需检查当前关

我有一个活动扩展TextWatcher以检测某些EditText中的更改,因此它实现:

public void afterTextChanged(Editable s)

我的问题是:如果有多个EditText具有.addTextChangedListener(此)集,在后文本更改过程中,如果给定可编辑对象,我如何区分哪一个已更改?

请参见基本上创建您自己的类,以使用构造函数处理侦听器,该构造函数定义您监视的edittext并传递您分配的edittext。

另一个选项,匿名内部类更少,只需检查当前关注的
视图
如果您的
TextWatcher
应用程序仅依赖于用户在键入时所做的更改,则更改将始终发生在具有当前焦点的
视图中。从
活动
窗口
内的任何位置调用
getCurrentFocus()
,将返回用户关注的
视图。从
TextWatcher
内部来看,这几乎肯定是特定的
EditText
实例


希望有帮助

有一种方法可以实现这一点,而无需为每个
EditText
创建
TextWatcher
对象,但我不会使用它:

protected void onCreate(Bundle savedInstanceState) {
    // initialization...

    EditText edit1 = findViewById(R.id.edit1);
    edit1.addTextChangedListener(this);
    EditText edit2 = findViewById(R.id.edit1);
    edit2.addTextChangedListener(this);
}

private static CharSequence makeInitialString(EditText edit) {
    SpannableStringBuilder builder = new SpannableStringBuilder();
    builder.setSpan(edit, 0, 0, Spanned.SPAN_MARK_MARK);
    return builder;
}

public void afterTextChanged(Editable s) {
    EditText[] edits = s.getSpans( 0, s.length(), EditText.class );
    if (edits.length != 1) {
        // this mustn't happen
    }

    // here's changed EditText
    EditText edit = edits[0];
}