如何从列表视图中从 onItemClick() 获得的列表项的联系人 Uri 中检索数据?

Posted

技术标签:

【中文标题】如何从列表视图中从 onItemClick() 获得的列表项的联系人 Uri 中检索数据?【英文标题】:How to retrieve data from contact Uri of a list item obtained from onItemClick() in listview? 【发布时间】:2014-10-30 17:21:57 【问题描述】:

我如何从列表视图中的 uri 获取联系人详细信息? .我已经从列表视图中获得了所选联系人的联系人 uri。以下 sn-p 是我尝试过但不起作用的。更令人惊讶的是,Logging 语句甚至都不执行!

@Override
public void onItemClick(
    AdapterView<?> parent, View item, int position, long rowID) 
    // Get the Cursor
    Cursor cursor = ((SimpleCursorAdapter) parent.getAdapter()).getCursor();
    // Move to the selected contact
    cursor.moveToPosition(position);
    // Get the _ID value
    mContactId = cursor.getLong(CONTACT_ID_INDEX);
    // Get the selected LOOKUP KEY
    mContactKey = cursor.getString(CONTACT_KEY_INDEX);
    // Create the contact's content Uri
    mContactUri = Contacts.getLookupUri(mContactId, mContactKey);
    // ListView Clicked item index

    String id=new String();
    String name = new String();
    String hasPhone = new String();
    int idx;

    Cursor cursor1 = getActivity().getContentResolver().query(mContactUri, null, null, null, null);
    
        idx = cursor1.getColumnIndex(ContactsContract.Contacts._ID);
        id = cursor1.getString(idx);

        idx = cursor1.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
        name = cursor1.getString(idx);

        idx = cursor1.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
        hasPhone = cursor1.getString(idx);
    
    Log.i("Phone Number","The phone number is: "+hasPhone);
    Log.i("Name","The name is: "+name);
    /*
     * You can use mContactUri as the content URI for retrieving
     * the details for a contact.
     */

这是单击列表视图项的特定时间的日志。

09-05 21:55:07.663: I/am_on_resume_called(25140): [0,com.laer.okgo.PersonListActivity]
09-05 21:55:07.738: W/Adreno-GSL(25140): <ioctl_kgsl_device_getproperty:663>: mmap failed: errno 22 Invalid argument
09-05 21:55:07.738: I/Adreno-EGL(25140): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I10246dbd022c719c705be805d5642cc8fdfbd2a2Date: 03/10/14
09-05 21:55:07.739: I/CanvasContext(25140): Initialized EGL, version 1.4
09-05 21:55:13.932: I/ImageButton(25140): Clicked!!

这是列表视图在ImageButton 启动后显示的位置

09-05 21:55:13.941: I/am_on_paused_called(25140): [0,com.laer.okgo.PersonListActivity]

这是当我单击列表项时。

09-05 21:55:17.825: I/am_on_resume_called(25140): [0,com.laer.okgo.PersonListActivity]

也是一个奖励问题。如何更改列表视图的主题/样式?如果有人能指出我正确的方向,那就太好了!

【问题讨论】:

您使用OnItemClickListener OnListItemClick() 监听ListView OnListItemClick() 不起作用,因为我正在使用带有LoaderManager.LoaderCallbacks&lt;Cursor&gt; 接口的AdapterView。整个代码也在一个片段中。 Styles for ListView 或查看androidHive 不能用AdapterView代替扩展BaseAdapter类吗?以下答案给了我相互矛盾的想法...***.com/a/16796329 09-05 21:55:13.932: I/ImageButton(25140): Clicked!!点击列表项时会出现这种情况吗? 【参考方案1】:

现在这真的是我的错。我点击了错误的 UI 元素。有两个名称相似的按钮。我没有意识到这一点。大声笑我搞砸了大时间!浪费了很多时间... 故事的寓意就是让您的 UI/UX 元素具有独特且易于区分的名称!

【讨论】:

以上是关于如何从列表视图中从 onItemClick() 获得的列表项的联系人 Uri 中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

OnItemClick 在列表视图中无法正常工作

Android OnItemClick 无法将加载的 SQL 数据库加载到列表视图中

Android ListView 在 onItemClick 之后修改

如何从列表视图中从 sqlite 检索数据单击并查看不同的活动 android studio

ListView:如何从列表中访问视图以更改背景颜色?

Listview 中未触发 Onitemclick 侦听器