0

Je reçois l'erreur:en cas remise en liaison de données Android

****/ data binding error ****msg:Cannot find method handler on ViewDataBinding app/src/main/res/layout/activity_main.xml loc:55:27 - 55:76 ****\ data binding error **** 



<data class="ActivityMainBinding"> 
     <variable 
      name="login" 
      type="***.loginViewModel" /> 

     <variable 
      name="handler" 
      type="***.LoginHandler" /> 
    </data> 

<Button 
     android:onClick="@{() -> handler(context).onLoginButtonClicked(login)}" 
     android:id="@+id/submit_button" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="16dp" 
     android:layout_marginStart="16dp" 
     android:layout_marginTop="24dp" 
     android:text="Sign In" 
     app:layout_constraintEnd_toEndOf="@+id/user_password" 
     app:layout_constraintStart_toStartOf="@+id/user_password" 
     app:layout_constraintTop_toBottomOf="@+id/user_password"/> 

et le gestionnaire de connexion classe:

class LoginHandler(mContext: Context) { 

    var mContext=mContext as Activity 

    fun onLoginButtonClicked(userInfo: loginViewModel){ 

     Log.i("Email is ",userInfo.userEmailAddress) 
     Log.i("Password is ",userInfo.userPassword) 

     userInfo.login(userInfo.userEmailAddress, userInfo.userPassword, mContext) 

    } 

} 

Pourquoi ai-je cette erreur? Je suis revérifié le nom de la fonction et la syntaxe sur le clic. Solution essayée: 1. Nettoyer et reconstruire le projet.

+0

sur clic utiliser le nom amusant que dans xml – Nithinlal

+0

-vous dire que onLoginButtonClicked (login) fonctionnera? @Nithinlal –

+0

no onLoginButtonClicked() ne fonctionne que sur xml – Nithinlal

Répondre

0

handler est définie comme une variable, donc handler(context) n'a aucun sens. Vous devrez simplement utiliser handler et initialiser l'objet dans votre code.

handler.onLoginButtonClicked(login)

+0

J'ai essayé d'utiliser cette android: onClick = "@ {() -> LoginHandler (contexte) .onLoginButtonClicked (login)}" mais pas travaillé . Pouvez-vous expliquer votre réponse par un exemple de code? @Kiskae –

+0

En regardant à travers les documents de liaison de données, il semble que la création de nouveaux objets n'est pas possible. Vous devrez donc initialiser 'handler' dans votre code et simplement appeler la méthode avec' handler.on * '. – Kiskae

+0

donc je ne peux pas passer le contexte dans le gestionnaire? –