我想为多个TextWatcher字段实现EditText接口(interface)。目前我正在使用:

text1.addTextChangedListener(this);
text2.addTextChangedListener(this);

然后覆盖我的Activity中的方法:
public void afterTextChanged(Editable s) {}

public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
 // do some operation on text of text1 field
 // do some operation on text of text2 field
}

但这工作正常,但我正在寻找其他方式,以便可以明确确定EditText当前集中在哪个SoftKeyboard字段中。

最佳答案

@Sebastian Roth's answer中建议的解决方案不是某些TextWatcherEditTexts实例之一。它是一个类和n个EditTexts的该类的n个实例。

每个EditText都有自己的Spannable。 TextWatcher的事件具有此Spannable作为s参数。我检查他们的hashCode(每个对象的唯一ID)。 myEditText1.getText()返回该Spannable。因此,如果myEditText1.getText().hashCode()s.hashCode()相等,则意味着s属于myEditText1
因此,如果您想为某个TextWatcher使用EditTexts的一个实例,则应使用以下方法:

private TextWatcher generalTextWatcher = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {

        if (myEditText1.getText().hashCode() == s.hashCode())
        {
            myEditText1_onTextChanged(s, start, before, count);
        }
        else if (myEditText2.getText().hashCode() == s.hashCode())
        {
            myEditText2_onTextChanged(s, start, before, count);
        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

        if (myEditText1.getText().hashCode() == s.hashCode())
        {
            myEditText1_beforeTextChanged(s, start, count, after);
        }
        else if (myEditText2.getText().hashCode() == s.hashCode())
        {
            myEditText2_beforeTextChanged(s, start, count, after);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
        if (myEditText1.getText().hashCode() == s.hashCode())
        {
            myEditText1_afterTextChanged(s);
        }
        else if (myEditText2.getText().hashCode() == s.hashCode())
        {
            myEditText2_afterTextChanged(s);
        }
    }

};


myEditText1.addTextChangedListener(generalTextWatcher);
myEditText2.addTextChangedListener(generalTextWatcher);

10-07 19:36
查看更多