RxKotlin объединяет последние более 9 полей

Я новичок в разработке Android, я пытаюсь выполнить проверку формы с помощью RxKotlin и RxBinding.

Мне нужно руководство, как сделать проверку формы с более чем 9 полями? На самом деле я могу объединить результат, используя Observable.combinelatest.

Это код, который я пытался:

Observable.combineLatest(profileObserver, shopName, shopAddress, ownerName, idCard, ownerHp, ownerEmail, pin, confirmPin,
                Function9<CharSequence, CharSequence, CharSequence, CharSequence, CharSequence, CharSequence, CharSequence, CharSequence, CharSequence,
                        Boolean> {profile, name, address, owner, card, hpNumber, email, currentPin, confirmationPin ->
                    return@Function9 isShopNameValid(name.toString()) && isShopAddressValid(address.toString())
                            && isOwnerNameValid(owner.toString())
                            && isIdCardValid(card.toString())
                            && isOwnerHpValid(hpNumber.toString())
                            && isOwnerEmail(email.toString())
                            && isPinValid(currentPin.toString())
                            && isConfirmPinValid(confirmationPin.toString())
                }).subscribe {
                registrationProcess.isEnabled = it
            }

У меня есть еще 3 поля, которые нужно проверить.


person Taslim Hartmann    schedule 24.07.2019    source источник
comment
(1) Код неполный. Можете ли вы заполнить образец и отформатировать его? (2) Что важно в форме с более чем 9 полями? (3) Какие 3 поля вам нужно проверить, что вы пробовали и что не работает?   -  person Jake Reece    schedule 24.07.2019
comment
На самом деле я пытаюсь сделать регистрационную форму с 13 edittext и все поля являются обязательными. Кнопка для продолжения регистрации отключена до тех пор, пока валидация не будет действительна. Проверка каждого edittext отличается друг от друга. Я думаю, что у меня уже получается с 9 полями. Но для более чем 9 полей я все еще борюсь.   -  person Taslim Hartmann    schedule 25.07.2019


Ответы (1)


есть метод Observable.combineLatest, который принимает Iterable наблюдаемых для этого случая. Составьте список всех наблюдаемых полей формы и используйте эту версию combLatest.

val fieldsList = listOf(shopName) //etc
Observable.combineLatest(fieldsList){arrayOfLatest ->
  //validate fields 
  isValidShopName(arrayOfLatest[0])// etc
}

В этом случае я бы также подумал о том, чтобы каждый наблюдаемый валидировал себя. Пример

shopName.map{
  isValidShopName(it)
}
//and so on for each field

//Now combine into list as in above example
Observable.combineLatest(validatedFieldsList){arrayOfResults ->
   arrayOfResults.any{!it} //If true there is an invalid field
}
person Nathan Schwermann    schedule 13.09.2019