Android: QuickContactBadge dans la ListView
-
14-11-2019 - |
Question
D'abord le scénario:
J'ai une liste où chaque élément a une photo d'un contact et du texte. Je voudrais cliquer sur l'image et faire apparaître le QuickContactBadge
. L'insigne est défini par l'extrait XML suivant
<QuickContactBadge android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/badge"
android:layout_alignParentBottom="true"></QuickContactBadge>
Ce que j'ai essayé et échoué:
- Définissez un badge réutilisable et réutilisez-le pour tous les cas. La liste et le badge sont placés dans
RelativeLayout
- Avoir un badge défini par chaque élément de liste. L'article utilise
RelativeLayout
Qu'est ce que je vois:
Fondamentalement rien. Le code obtient une instance de badge valide, puis j'applique la logique suivante
contactPhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
Log.d(TAG, "Image click");
if (badge != null) {
badge.assignContactFromEmail("johndoe@gmail.com", true);
badge.setMode(ContactsContract.QuickContact.MODE_SMALL);
badge.bringToFront();
}
}
});
Au moment où je clique, je peux passer à travers le code dans onClick
Handler pourtant le badge ne vient jamais
Questions:
- Fait
QuickContactBadge
Vous avez une logique de placement? Lorsque je clique sur l'image, dois-je calculer la position du badge et me réajuster ou est-elle intégrée? - Est-il possible de réaliser ce que je décris ci-dessus (badge pour les images affichées dans la liste) et ce que je fais mal (ou manque)
La solution
Avorter! Avorter!
Fondamentalement, j'ai mal compris ce qu'est le badge et comment l'utiliser. Ce que j'essayais de faire, c'est de détecter un clic sur l'image et d'appeler l'insigne. C'est fondamentalement mauvais car tout ce que je devais faire était simplement d'utiliser QuickContactBadge
À la place de ImageView
dans mon code. Après avoir remplacé les images par des badges dans l'élément XML, la magie était automatiquement là.
Dit que - il est possible de faire éclater le badge en utilisant le code, se référer à Cet article sur la façon de le faire