我正在构建一项活动,我想填充有电话号码的联系人。
我没有使用Intent,因为我希望在listview中的每个联系人之前都有一个复选框。
我正在使用CursorLoader。以下是onCreateLoader方法的一些代码;
String projection[] = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME};
Uri uri = ContactsContract.Data.CONTENT_URI;
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1" +
" AND " + ContactsContract.Contacts.IN_VISIBLE_GROUP + " =1";
String order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
CursorLoader loader = new CursorLoader(this, uri, projection, selection, null, order);
我使用ResourceCursorAdapter的子类和ListView。
有没有人有任何想法我如何删除重复项?除非我真的需要,否则我不想使用Set。
答案 0 :(得分:5)
我建议查询Contacts
表而不是原始Data
表。
Uri uri = ContactsContract.Contacts.CONTENT_URI;
数据表包含原始联系人数据,这可能意味着同一“人”的多个条目,因为Android联系人是从多个不同的帐户来源汇总的。其他一切看起来都不错。
答案 1 :(得分:1)
如果您已经验证光标返回的数据不是结果加倍(并且内容提供商没有重复项),则问题很可能出现在newView
和bindView
的实施中。确保newView
只返回一个“空白”视图,这意味着没有设置TextViews或ImageViews的值。在bindView
中设置这些值。很可能bindView
未正确设置视图中的值。