问题描述
我要实现的 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);
这篇关于TextWatcher多于一个的EditText的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!