2017-10-11 23 views
1

J'ai une vue de texte à laquelle j'ai besoin de créer un écouteur pour onLongClick. Maintenant, pour le viewmodel respectif, il a une fonction sendLogs() qui traite de la logique pour onClick. Si je change onClick en fonction onLongClick, je ne reçois jamais d'appel. Y at-il un moyen de le faire fonctionner pour onLongClick? OnClick est directement lié à ma fonction de classe de modèle mais pas à onLongClick. Donc, je pense que la reliure de la classe du modèle est correcte, mais je pourrais avoir besoin d'un peu de travail ici.La connexion de données Android onLongClick ne fonctionne pas

<data> 
    <import type="android.view.View" /> 

    <variable 
     type="com.aaa.bbb.viewmodel.SystemSettingsViewModel" 
     name="systemSettings" 
    </variable> 
</data> 

<TextView 
    android:gravity="end" 
    android:id="@+id/tv_logging" 
    android:layout_centerVertical="true" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dp" 
    android:layout_width="wrap_content" 
    android:onClick="@{() -> systemSettings.sendLogs()}" 
    android:text="@string/enable_logs" 
    android:textAlignment="viewEnd" /> 
+0

Publiez votre code XML complet –

+0

@BurhanuddinRashidI a ajouté la partie de liaison de la mise en page. Tout est lié à ce problème. –

+0

Il n'y avait rien de si difficile que vous auriez dû l'essayer, voir ma réponse ci-dessous. –

Répondre

4

J'ai réussi à travailler correctement. Je doute que cela soit correctement documenté.

Dans xml

android:onLongClick="@{(view) -> presenter.onLongClickOnHeading(view)}" 

En classe présentateur viewmodel

public boolean onLongClickOnHeading(View v) { 
    //logic goes here 
    return false; 
} 

Note: cette signature de la méthode doit être exactement dans ce format. Sinon, les erreurs de dissimulation seront levées lors de l'exécution.

+0

Le paramètre de retour pour la signature de méthode doit être "booléen" – Jovin

1

Vous devriez regarder dans ce document

OnLongClick est aussi facile que onClick

Au sein de votre SystemSettingsViewModel vous pouvez avoir

public boolean onLongClick(){} 

et xml

android:onLongClick="@{() -> presenter.onLongClick()}" 
+0

Oui, ça devrait l'être. J'ai lu ce document et essayé plus tôt. Mais pas de résultat. Le compilateur n'a pas pu être compilé avec android: onLongClick() –

0

Pour que cela fonctionne, la partie entre parenthèses doit correspondre à la signature de la méthode de la View.OnLongClickListener d'interface qui ressemble à ceci:

boolean onLongClick(View view); 

Voilà donc comment je l'ai eu à travailler:

<View 
... 
android:onLongClick="@{(view) -> listener.onLongClick(view, viewmodel)}"/> 
...