Как назначить TextWatcher на EditField при MVP

236
09 декабря 2017, 08:01

Есть MainActivity, есть Presenter, есть отдельный класс Util который наследуется от TextWatcher. Задача в том, чтобы назначить этот TextWatcher на editField.

Сейчас MainActivity

 mainPresenterImpl = new MainPresenterImpl();
 mainPresenterImpl.translationInputFieldListener(translatedTextInput);

Presenter

@Override
public void translationInputFieldListener(EditText translatedTextInput) {
    Log.v("TAG", "In presenter");
    translatedTextInput.addTextChangedListener(textWatcherUtil = new TextWatcherUtil());
}

Util

public class TextWatcherUtil implements TextWatcher{
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}

}

Задача, назначить в методе afterTextChanged. Там уже дальше будет выполнятся метод сохранения значения в SharedPreferences.

P.S. Если мой вопрос составлен не корректно, то если минусуете, пожалуйста отпишите в комментариях, что сделанно не верно, чтобы ошибок не повторялось. Спасибо

Answer 1

textWatcher это из категории дата биндинга в сторону MVVM. В случае паттерна MVP TextWatcher'a держите во вьюхе и в его колбеках вызываете презентер. и вся логика уже в презентере. т.е. будет вот так:

public class TextWatcherUtil implements TextWatcher{
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
     presenter.beforeTextChanged(...);
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
   presenter.onTextChanged(...);
}
@Override
public void afterTextChanged(Editable editable) {
   presenter.afterTextChanged(...);
}

Т.е. в вашем конкретном случае, вы в коллбеке afterTextChanged() вызываете presenter.onTextChanged() и в этом методе презентер вызывает свои Private методы работы с префами

А если у вас идет работа с префами, что можно считать репозиторием, то можете прикрутить к MVP еще и Interactor если простым языком, это класс между презнтером и моделью, который преобразует данные (+логику работы с ними) из модели в презентер и обратно в необходимом виде

READ ALSO
java.lang.IllegalStateException не могу разобраться

java.lang.IllegalStateException не могу разобраться

Не могу понять в чем проблема ошибки

308
Обновление Spinnera налету из коллекции

Обновление Spinnera налету из коллекции

Как я уже понял, спиннер обновить легко и просто не получитсяУ меня при включении в него загружается вот этот пустой List

246
Настройка logback.xml для логирования в файл

Настройка logback.xml для логирования в файл

У меня задача настороить logbackxml так, чтобы каждый день создавался новый файл log_%d{yyyy-MM-dd}

483