在afterTextChanged事件中获取可编辑ID

时间:2011-05-10 14:14:52

标签: android events text

我有一个扩展TextWatcher的Activity来检测某些EditTexts中的更改,因此它实现了:

public void afterTextChanged(Editable s)

我的问题是:如果设置了多个具有.addTextChangedListener(this)的EditTexts,如何在afterTextChanged过程中区分给定可编辑对象的哪个更改?

3 个答案:

答案 0 :(得分:11)

另一个选项,匿名内部类较少,只需检查当前关注的View如果您的TextWatcher申请仅取决于用户在键入时所做的更改,则更改将始终发生在当前具有焦点的View中。从getCurrentFocus()Activity内的任何位置拨打Window都会返回用户关注的View。从TextWatcher内部,这几乎肯定是特定的EditText实例。

SDK Docs Link

希望有帮助!

答案 1 :(得分:2)

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

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];
}

答案 2 :(得分:0)

请参阅TextWatcher for more than one EditText基本上创建自己的类来处理侦听器,其构造函数定义了您正在监视的edittext并传递您指定的edittext。