Intereting Posts

метод входа не вызывает использование привязки данных в android

Привет, у меня есть этот layout и я пытаюсь вызвать функцию viewmodel login из layout при нажатии button но он не вызывает.

Кто-нибудь знает, в чем проблема? Как его решить?

activity_login.xml

 <layout> <data> <variable name="loginViewModel" type="com.app.android.login.LoginViewModel" /> </data> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" tools:context="com.app.android.login.LoginActivity" tools:ignore="missingPrefix"> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="@dimen/default_view_margin_bottom_8dp"> <android.support.design.widget.TextInputLayout android:id="@+id/til_login_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/default_view_margin_right_8dp" android:layout_marginStart="@dimen/default_view_margin_left_8dp" android:textColorHint="@color/colorSecondaryText" app:hintTextAppearance="@style/AppTheme.InputLayoutStyle" app:layout_constraintBottom_toTopOf="@+id/til_login_password" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_chainStyle="packed"> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/login_email" android:imeOptions="actionNext" android:singleLine="true" android:text="@={loginViewModel.email}" android:textColor="@color/colorPrimaryText" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:id="@+id/til_login_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/default_view_margin_right_8dp" android:layout_marginStart="@dimen/default_view_margin_left_8dp" android:textColorHint="@color/colorSecondaryText" app:hintTextAppearance="@style/AppTheme.InputLayoutStyle" app:layout_constraintBottom_toTopOf="@+id/btn_login_login" app:layout_constraintTop_toBottomOf="@+id/til_login_email" app:layout_constraintVertical_chainStyle="packed"> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/login_password" android:imeOptions="actionDone" android:singleLine="true" android:text="@={loginViewModel.password}" android:textColor="@color/colorPrimaryText" /> </android.support.design.widget.TextInputLayout> <Button android:id="@+id/btn_login_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/default_view_margin_right_8dp" android:layout_marginStart="@dimen/default_view_margin_left_8dp" android:layout_marginTop="48dp" android:onClick="@{loginViewModel.login}" android:text="@string/login_btn_text" android:textColor="@color/colorWhite" app:layout_constraintBottom_toTopOf="@+id/textview_login_forgot_password" app:layout_constraintTop_toBottomOf="@+id/til_login_password" app:layout_constraintVertical_chainStyle="packed" /> <TextView android:id="@+id/textview_login_forgot_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/default_view_margin_right_8dp" android:layout_marginStart="@dimen/default_view_margin_left_8dp" android:layout_marginTop="36dp" android:gravity="center" android:text="@string/login_forgot_password" app:layout_constraintBottom_toTopOf="@+id/btn_login_register" app:layout_constraintTop_toBottomOf="@+id/btn_login_login" app:layout_constraintVertical_chainStyle="packed" /> <Button android:id="@+id/btn_login_register" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/default_view_margin_right_8dp" android:layout_marginStart="@dimen/default_view_margin_left_8dp" android:text="@string/login_sign_up" android:textColor="@color/colorWhite" app:layout_constraintBottom_toBottomOf="parent" /> </android.support.constraint.ConstraintLayout> </ScrollView> </layout> 

LoginActivity.kt

 class LoginActivity : BaseActivity(), LoginNavigator { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val activityLoginBinding: ActivityLoginBinding = DataBindingUtil.setContentView<ActivityLoginBinding>(this, R.layout.activity_login) } override fun startHomeActivity() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } override fun startRegistrationActivity() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } override fun startForgotPasswordActivity() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } override fun handleError(throwable: Throwable) { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } } 

LoginViewModel.kt

 class LoginViewModel : AnkoLogger { val email = ObservableField<String>() val password = ObservableField<String>() fun login(view: View) { val viewVisibility: Int = view.visibility info { viewVisibility } info { "${email} and ${password}" } } /** * Validate email and password. It checks email and password is empty or not * and validate email address is correct or not * @param email email address for login * @param password password for login * @return true if email and password pass all conditions else false */ fun isEmailAndPasswordValid(email: String, password: String): Boolean { if (email.isEmpty()) return false if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) return false if (password.isEmpty()) return false return true } } 

Посмотрев на вашу Activity , кажется, вам не хватает, чтобы установить переменную viewModel .

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val activityLoginBinding: ActivityLoginBinding = DataBindingUtil.setContentView<ActivityLoginBinding>(this, R.layout.activity_login) activityLoginBinding.loginViewModel = LoginViewModel() }