【问题标题】:Android: QuickContactBadge in the ListViewAndroid:ListView 中的 QuickContactBadge
【发布时间】:2025-12-10 16:05:02
【问题描述】:

首先是场景:

我有一个列表,其中每个项目都有联系人的照片和一些文字。我想点击图片并调出QuickContactBadge。徽章由以下 XML sn-p 定义

<QuickContactBadge android:layout_height="wrap_content"
   android:layout_width="wrap_content" android:id="@+id/badge" 
   android:layout_alignParentBottom="true"></QuickContactBadge>

我尝试过但失败了:

  1. 定义一个可重复使用的徽章并在所有情况下重复使用它。列表和徽章都放入RelativeLayout
  2. 为每个列表项定义一个标记。该项目使用RelativeLayout

我看到了什么:

基本上没有。代码获取有效的徽章实例,然后我应用以下逻辑

    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();
            }
        }
    });

当我单击时,我可以单步执行 onClick 处理程序中的代码,但徽章永远不会出现

问题:

  1. QuickContactBadge 有任何放置逻辑吗?当我点击图片时,我需要计算徽章位置并重新调整还是内置?
  2. 是否有可能实现我上面描述的内容(列表中显示的图像的徽章)以及我做错了什么(或缺失)

【问题讨论】:

  • 所以#1 是肯定的。 QuickContactBadge 没有放置逻辑,但它会触发调用 QuickContact 的 Intent,该 Intent 根据点击屏幕的位置计算 Rect

标签: android listview quickcontactbadge


【解决方案1】:

中止!中止!

基本上我完全误解了徽章是什么以及如何使用它。我试图做的是检测点击图像并调用徽章。这根本上是错误的,因为我需要做的就是在我的代码中简单地使用ImageViewQuickContactBadge INSTEAD。在我用徽章替换项目中的图像之后,XML 魔法自动出现了。

据说-可以使用代码弹出徽章,请参阅this article了解如何操作

【讨论】: