я получаю следующую ошибку с привязкой данных,
Имя атрибута "weddingPersonMobile.getText", связанное с типом элемента "com.google. android .material.textfield.TextInputEditText", должно следовать символом '='.
В этом я делаю проверку с помощью onFocusChange, принимая текст в качестве параметра.
Хотя это работает нормально с edittext, но с "com.google. android .material.textfield.TextInputEditText" он дает мне ошибку
Это мой xml,
<data>
<import type="com.binding.WeddingBindingValidator" />
<variable
name="currentCountryCode"
type="String" />
<variable
name="viewModel"
type="com.WeddingInfoViewModal" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_background"
android:orientation="vertical"
android:padding="16dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/weddingPersonMobileLayout"
style="?materialEditLineStyle"
prefixClickListener="@{weddingCountryPicker}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true"
app:prefixText="@{currentCountryCode}">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/weddingPersonMobile"
hideKeyboardOnInputDone="@{true}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:maxLength="10"
android:onFocusChange="@{(view, hasFocus)->WeddingBindingValidator.validateWeddingPersonMobileWitCountryCode(view, hasFocus,
weddingPersonMobile.getText().toString())}"
android:text="@={viewModel.eventMobile}" />
</com.google.android.material.textfield.TextInputLayout>
<com.hbb20.CountryCodePicker
android:id="@+id/weddingCountryPicker"
setDefaultCountryCode="@{currentCountryCode}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
Это мой пользовательский адаптер привязки и валидатор,
object WeddingBindingValidator {
@JvmStatic
fun validateWeddingPersonMobileWitCountryCode(
view: View,
hasFocus: Boolean,/*
countryCode: String?,*/
mobileNo: String?
) {
if (!hasFocus)
when {
/* countryCode.isNullOrBlank() -> setErrorOnEditText(
view,
R.string.wedding_validation_countryCode
)*/
mobileNo.isNullOrEmpty() -> setErrorOnEditText(
view,
R.string.wedding_validation_mobile_empty
)
mobileNo.length < PHONE_LENGTH -> setErrorOnEditText(
view,
R.string.wedding_validation_mobile
)
}
}
private fun setErrorOnEditText(view: View, @StringRes stringResourceId: Int) {
(view as EditText).error =
view.context.getString(stringResourceId)
}
}
@BindingAdapter("prefixClickListener")
fun prefixClickListener(view: TextInputLayout, countryCodePicker: CountryCodePicker) {
view.prefixTextView.setOnClickListener {
countryCodePicker.launchCountrySelectionDialog(view.context!!.countryCodeString)
}
countryCodePicker.setOnCountryChangeListener {
view.prefixText = countryCodePicker.defaultCountryNameCode
}
}
@BindingAdapter("setDefaultCountryCode")
fun defaultCountryCodeSet(countryCodePicker: CountryCodePicker, defaultCountryCodeSet: String?) {
countryCodePicker.setCountryForNameCode(defaultCountryCodeSet)
}