MVVM + Kotlin + Лучшая практика привязки данных - PullRequest
0 голосов
/ 24 мая 2018

Я создаю приложение на MVVM + Kotlin + Databinding, и у меня возникла такая ситуация, в которой я застрял.У меня есть LoginFragment, в котором есть текст редактирования номера телефона и кнопка. Теперь мне нужно проверить, является ли номер телефона пустым или нет, когда пользователь нажимает кнопку.Обычно я делал бы это, используя этот код в моем фрагменте.

if(!binding!!.phone.text.isEmpty()) {
    //do something
}

Но, по мнению экспертов , мой взгляд не должен ничего знать о бизнес-логике, поэтому мне нужна эта проверкавнутри моей модели представления.так что должно быть лучшим способом для достижения этого?

1 Ответ

0 голосов
/ 24 мая 2018

Вот практика ставок для достижения этого (с моей точки зрения):

В вашем макете добавьте наблюдателя текста и текст к вашему EditText

android:text="@{view_model.phone}"
app:addTextChangedListener="@{view_model.phoneWatcher}"

и нажмитеметод для вашей кнопки

android:onClick="@{() -> view_model.save()}"

Внутри ViewModel у вас будет наблюдаемый текст и наблюдатель

val phone = ObservableField<String?>()

val phoneWatcher = object : TextWatcherAdapter() {
    override fun afterTextChanged(s: Editable?) {
        phone.set(s?.toString())
    }
}

Теперь вы можете сделать свой чек внутри ViewModel

fun save() {
    if (phone.get()?.isNotEmpty == true) {
        // TODO: do something
    }
}

Также обратите внимание, что лучше не делать что-то подобное binding!!.phone в Котлине.Если вы используете !!, чтобы сделать возможный обнуляемый объект похожим на ненулевой (даже если вы уверены на 100%) - вы делаете что-то не так.

...