addTextChangedListener как interface
Подскажите, пожалуйста, почему я могу реализовать интерфейс View.OnClickListener вот так
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
//.............
break;
case R.id.button2:
//.............
break;
}
}
}
button1.setOnClickListener(this);
button2.setOnClickListener(this);
А вот с addTextChangedListener я не могу так сделать, то есть я не могу написать так:
public class MainActivity extends AppCompatActivity implements View.addTextChangedListener
Хотя и setOnClickListener и addTextChangedListener - это тоже Listener. Я новичёк, и не могу понять в чём разница между двуми лисенерами. Подскажите, пожалуйста
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Как вариант можно сделать TextWatcher класс:
private class GenericTextWatcher implements TextWatcher{
private View view;
private GenericTextWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void afterTextChanged(Editable editable) {
String text = editable.toString();
switch(view.getId()){
case R.id.name:
model.setName(text);
break;
case R.id.email:
model.setEmail(text);
break;
case R.id.phone:
model.setPhone(text);
break;
}
}
}
в него вы передаете view текстового поля и в afterTextChanged разбираете в switch-case:
someEdittext.addTextChangedListener(new GenericTextWatcher(someEdittext));
вот есть подобный вопрос. Если вам нужно проверять изменился ли текст по сравнению с тем что был ранее установлен в поле, то можно в качестве tag его присвоить и потом проверять:
view.getTag() != text