0

I am stuck in binding adapter. Following adapter is not working and it looks like that IDE is having trouble in finding this adpater. I have tried many solutions, but all in vain.

I tried all of answers provided in this question, but nothing worked: Cannot find the setter for attribute with parameter

Note: I have another adapter to load image in same file, and it is working fine.

What I want to achieve is simply, whenever user enters the characters in some editText, if that editText has destination specified, then request focus of destination after character count reaching to limit.

Binding Adapter

@BindingAdapter(value = ["destination","limit"])
fun moveToNext(editText: EditText, dest: EditText, limit:Int) {
    editText.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(s: Editable?) {

        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

        }

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            if (count == limit) {
                dest.requestFocus()
            }
        }

    })
}

in .xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:bind="http://schemas.android.com/tools">

    <data>

        <variable
            name="viewModel"
            type="com.eshaafi.eshaafi.ui.auth.mobile_verification.MobileVerificationViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true">

        <ImageView
            android:id="@+id/logo"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_marginTop="48dp"
            android:src="@drawable/ic_launcher_512"
            android:transitionName="sharedLogo"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.35"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/logoText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="e s h a a f i"
            android:textColor="@color/colorLogoBlue"
            android:textSize="24sp"
            android:textStyle="bold"
            android:transitionName="sharedLogoText"
            app:layout_constraintBottom_toBottomOf="@+id/logo"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.12"
            app:layout_constraintStart_toEndOf="@+id/logo"
            app:layout_constraintTop_toTopOf="@+id/logo" />



        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:text="Wait for verification code"
            android:textColor="@color/colorBlack"
            android:textSize="18sp"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/logo" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="You will soon receive verification code on"
            android:textSize="14sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView" />

        <TextView
            android:id="@+id/mobileNumber"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@={viewModel.mobileNumber}"
            android:textColor="@color/colorBlack"
            android:textStyle="bold"
            android:textSize="16sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView2" />

        <EditText
            android:id="@+id/digit_1"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toStartOf="@+id/digit2"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="32dp"
            app:layout_constraintTop_toBottomOf="@+id/mobileNumber"
            destination="@{digit2}"
            limit="1"
            />

        <EditText
            android:id="@+id/digit2"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toStartOf="@+id/digit_3"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/digit_1"
            app:layout_constraintTop_toTopOf="@+id/digit_1" />

        <EditText
            android:id="@+id/digit_3"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toStartOf="@+id/dash"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/digit2"
            app:layout_constraintTop_toTopOf="@+id/digit_1" />

        <View
            android:id="@+id/dash"
            android:layout_width="16dp"
            android:layout_height="2dp"
            android:background="@color/colorGrey"
            app:layout_constraintEnd_toStartOf="@+id/digit_4"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/digit_3"
            app:layout_constraintTop_toTopOf="@id/digit_1"
            app:layout_constraintBottom_toBottomOf="@id/digit_1"/>

        <EditText
            android:id="@+id/digit_4"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toStartOf="@+id/digit_5"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/dash"
            app:layout_constraintTop_toTopOf="@+id/digit_1" />

        <EditText
            android:id="@+id/digit_5"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toStartOf="@+id/digit_6"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/digit_4"
            app:layout_constraintTop_toTopOf="@+id/digit_1" />

        <EditText
            android:id="@+id/digit_6"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/digit_5"
            app:layout_constraintTop_toTopOf="@+id/digit_1"
            android:imeOptions="actionDone"/>


        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnContinue"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="64dp"
            android:layout_marginRight="64dp"
            android:layout_marginBottom="16dp"
            android:alpha="0"
            android:padding="16dp"
            android:text="Continue"
            android:textColor="@color/colorPrimary"
            android:visibility="gone"
            app:backgroundTint="@color/colorWhite"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Errorr

Cannot find a setter for <android.widget.EditText destination> that accepts parameter type 'android.widget.EditText'

thezeeshantariq
  • 308
  • 2
  • 16
  • can you paste your whole xml file for better understanding? – P Vartak Mar 06 '20 at 06:37
  • Suggestion regardless of this issue app:layout_constraintEnd_toStartOf="@+id/digit2" app:layout_constraintTop_toBottomOf="@+id/mobileNumber" in above code you are refering digit2 and mobileNumber which is alread added id. so you should use it as below: app:layout_constraintEnd_toStartOf="@id/digit2" app:layout_constraintTop_toBottomOf="@id/mobileNumber" – P Vartak Mar 06 '20 at 06:38
  • I updated question and added full layout file. – thezeeshantariq Mar 06 '20 at 06:38
  • @PVartak your suggestion didn't made any difference – thezeeshantariq Mar 06 '20 at 06:43

1 Answers1

0

I figured it out on my own, that the problem was not with passing EditText, but the other parameter

Before

 <EditText
            android:id="@+id/digit_1"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toStartOf="@+id/digit2"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="32dp"
            app:layout_constraintTop_toBottomOf="@+id/mobileNumber"
            destination="@{digit2}"
            limit="1"
            />

Notice, the value of limit=1, and this was the problem, I simply changed it to limit="@{1}" and the error was gone

After

 <EditText
            android:id="@+id/digit_1"
            style="@style/CodDigitEditText"
            android:text=""
            app:layout_constraintEnd_toStartOf="@+id/digit2"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="32dp"
            app:layout_constraintTop_toBottomOf="@+id/mobileNumber"
            destination="@{digit2}"
            limit="@{1}"
            />
thezeeshantariq
  • 308
  • 2
  • 16