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
→ Ссылка