За именем атрибута "weddingPersonMobile.getText", связанным с типом элемента "TextInputEditText", должен следовать символ "=" - PullRequest
0 голосов
/ 09 января 2020

я получаю следующую ошибку с привязкой данных,

Имя атрибута "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)
}
...