Как использовать ссылку на представление в xml для передачи аргументов функции, используя привязку данных? - PullRequest
1 голос
/ 18 марта 2020

Я использую привязку данных для вызова функции моей модели представления, но функция требует значений текста редактирования. Но я не знаю, как передать ценность других взглядов.

Вот код xml. В этом я хочу передать значение пароля edittext в viewmodel по нажатию кнопки. Предложите мне способ сделать это, кроме использования onclickListeners во фрагменте и вызова функции оттуда.

 <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/small_margin"
            android:hint="@string/password_hint">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/password_input"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword" />

        </com.google.android.material.textfield.TextInputLayout>

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/login_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/big_action_button_red"
            android:text="@string/login_button_text"
            android:onClick="@{()->viewModel.validateUser(password_input.text)}"/>

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Просто создайте строковую переменную в вашем viewmodel поле для пароля, как это

  var password:String?=null

Теперь добавьте это в поле password_input, вот так

 android:text="@={viewmodel.password}" // this directly assign value of password field to password variable

Теперь, наконец, удалите параметр в методе validateUser и непосредственно используйте переменную password в этом методе.

0 голосов
/ 18 марта 2020

Используйте Двухстороннее связывание данных с паролем TextView, чтобы вы могли иметь текущее значение поля в LiveData в вашем ViewModel. Затем просто получите это значение в вашем ViewModel, когда вызывается validate().

<com.google.android.material.textfield.TextInputEditText
                android:id="@+id/password_input"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@={viewmodel.passowrd}"
                android:inputType="textPassword" />
...