TextWatcher多于一个的EditTextTextWatcher、EditText

2023-09-12 03:55:03 作者:养猪发家致富

我要实现的 TextWatcher 接口,多个的EditText 字段。目前我使用:

I want to implement the TextWatcher interface for more than one EditText fields. Currently I am using :

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

然后覆盖在我的活动方法:

then overriding the methods in my 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罗斯的回答建议的解决方案是不对 TextWatcher 一些实例 EditTexts 。它是一个类和N该类的n个实例 EditTexts

Suggested solution in @Sebastian Roth's answer is not one instance of TextWatcher for some EditTexts. It is one class and n instances of that class for n EditTexts.

每个EditText上都有自己的Spannable。 TextWatcher 的活动有这个Spannable为取值参数。我检查自己的哈希值code(每个对象的唯一ID)。 myEditText1.getText()返回Spannable。因此,如果 myEditText1.getText()。散列code()等于s.hash code()这意味着取值属于 myEditText1

Each EditText has its own Spannable. TextWatcher's events has this Spannable as s parameter. I check their hashCode (unique Id of each object). myEditText1.getText() returns that Spannable. So if the myEditText1.getText().hashCode() equals with s.hashCode() it means that s belongs to myEditText1

所以,如果你想拥有的 TextWatcher 一个实例一段 EditTexts 你应该使用这样的:

So if you want to have one instance of TextWatcher for some EditTexts you should use this:

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);
 
精彩推荐
图片推荐