我有一个扩展TextWatcher的Activity来检测某些EditTexts中的更改,因此它实现了:
public void afterTextChanged(Editable s)
我的问题是:如果设置了多个具有.addTextChangedListener(this)的EditTexts,如何在afterTextChanged过程中区分给定可编辑对象的哪个更改?
答案 0 :(得分:11)
另一个选项,匿名内部类较少,只需检查当前关注的View
。 如果您的TextWatcher
申请仅取决于用户在键入时所做的更改,则更改将始终发生在当前具有焦点的View
中。从getCurrentFocus()
或Activity
内的任何位置拨打Window
都会返回用户关注的View
。从TextWatcher
内部,这几乎肯定是特定的EditText
实例。
希望有帮助!
答案 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。