Моя реализация очень похожа на тот что в примере
Только я использую Moxy с его ViewStates.
И при изменении текста в EditText я сообщаю об этом презентеру, презентер кладет измененные данные в модель и говорит VIEW чтобы тот засетил данное значение. Но в отличии от примера, когда презентер говорит "засетать" значение, активити сетает данное значение обратно в EditText откуда первоначально значение были отправлено в презентер. Получается цикличность, это я решаю так .distinctUntilChanged()
:
RxTextView.textChanges(titleView)
.skip(1)
.map(CharSequence::toString)
.distinctUntilChanged()
.subscribe(presenter::changingTitle);
Теперь, при вводе с клавиатуры, когда презентер говорит "засеть" данные, происходит titleView.setText(textFromPresenter)
при каждом вводе символа, и курсор переходит в начало EditText'а (и еще невозможно удалять значения удерживая кнопку Delete на клавиатуре, тоже сразу переходит курсор на начало). Решил это так: debounce(1, TimeUnit.SECONDS)
- чтобы можно было удалять непрерывно и titleView.setSelection(textFromPresenter.length())
- чтобы курсор всегда был в конце ввода
RxTextView.textChanges(titleView)
.skip(1)
.debounce(1, TimeUnit.SECONDS)
.observeOn(rx.android.schedulers.AndroidSchedulers.mainThread())
.map(CharSequence::toString)
.distinctUntilChanged()
.subscribe(presenter::changingTitle);
@Override
public void setTitle(@Nullable String textFromPresenter) {
this.titleView.setText(textFromPresenter);
if (textFromPresenter != null) this.titleView.setSelection(textFromPresenter.length());
}
Мой экран, это аля AddOrUpdateView, при открытии этого экрана модель может быть уже заполнено(режим редактирования), при этом призентер при первом аттаче сетает данные из модели и сохранеят эти действия в ViewStates. Если перевернуть экран, данные будут восстановлены из ViewState, и из-за этого необходимо при изменении в модели сетать данные через презентер (AddToEndSingleStrategy, чтобы обновить ViewState).
Да, наверное, можно было бы убрать некоторые State из ViewState и не парится, но если каждый раз пренебрегать принципами MVP то зачем вообще использовать его..? p.s. Все конечно по своему понимают эти принципы, может и я неправильно понял и занимаюсь Over-Engineering. Может и не нужно делать как я ) Направьте на путь истинный
Как бы вы вышли с этой ситуации? Только не нарушая каноны MVP!
Если я правильно понял вопрос, то наиболее правильный вариант делать проверку в presenter. В presenter можно хранить текущее состояние title, и если новое значение которое прилетает в changingTitle не отличается от текущего title, то мы просто игнорируем и не меняем state
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите, пожалуйста, элементарный пример работы Retrofit2, в сети примеров куча, но все со своими подвохами
есть вот такой код и я хочу сделать так чтобы при нажатий на button фигуры расставлялись random, как это сделать ?
Пытаюсь найти подходящее решение, использую Slick SliderИмеется вот такое:
Создайте новый класс ExtendedClock, который будет наследоваться от Clock и добавьте параметр precision – количество миллисекунд между «тиками»Установите...