2017-10-21 56 views
1

Salut j'ai ce layout et j'essaie d'appeler la fonction de connexion viewmodel de la layout sur le clic sur button mais il n'appelle pas.méthode de connexion n'appelle pas en utilisant la liaison de données dans android

Est-ce que quelqu'un sait quel problème? Comment le résoudre?

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 
    } 

} 

Répondre

1

Hav En jetant un coup d'oeil à vous Activity, il semble que vous manquiez pour définir la variable viewModel là.

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