#java #android
#java #Android
Вопрос:
Я разработал приложение, которое получает доступ к контактам через распознаватель содержимого.Он показывает все контакты в одном представлении списка, даже дубликаты контактов также отображаются в том же представлении списка, но я хочу показать дубликаты контактов в другом представлении списка, чтобы я мог легко удалить их по своему желанию. Пожалуйста, помогите мне. Я буду вам сердечно благодарен .вот пример кода.
package com.example.contentprovider;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends AppCompatActivity {
// Cursor Adapter for storing contacts data
SimpleCursorAdapter adapter;
// List View Widget
ListView lvContacts;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Init ListView
lvContacts = (ListView) findViewById(R.id.lvContacts);
// Initialize Content Resolver object to work with content Provider
ContentResolver cr = getContentResolver();
// Read Contacts
Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI,
new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME }, null, null,
null);
// Attached with cursor with Adapter
adapter = new SimpleCursorAdapter(this, R.layout.row, c,
new String[] { ContactsContract.Contacts.DISPLAY_NAME },
new int[] { R.id.lblName });
// Display data in listview
lvContacts.setAdapter(adapter);
}
}
Ответ №1:
Я бы посоветовал вам добавить все контакты в список и удалить дубликаты с помощью hashset. потому что hashset не допускает повторяющихся элементов.
psedo code:---
1. Once get all object like name,phone number from contentResolver then add those string objet into arraylist
2. After that pass taht list to hashset so duplicate will be removed.
ArrayList<String> values=new ArrayList<String>();
HashSet<String> hashSet = new HashSet<String>();
hashSet.addAll(values);
values.clear();
values.addAll(hashSet);
it might be helpful for you .
Комментарии:
1. я не понял этот код и куда его поместить . пожалуйста, измените мой код.
2. Я изменил свой ответ
3. Уважаемый, на самом деле я полностью новичок в Android, я не знаю, как добавить объект в строку, поэтому я попросил вас изменить мой код. Код приведен выше. Еще раз спасибо
Ответ №2:
найти дубликат контакта из массива контактов
private ArrayList<PhoneContact> findDuplicates1(ArrayList<PhoneContact> phoneContacts) {
int i;
ArrayList<PhoneContact> list2 = new ArrayList<>();
PhoneContact contact;
int count ;
for (i = 0; i < phoneContacts.size() ; i ){
String contact1 = phoneContacts.get(i).getContactNumber();
contact = phoneContacts.get(i);
count = 0;
list2.add(contact);
for (int j = i 1 ;j < phoneContacts.size() ; j )
{
String contact2 = phoneContacts.get(j).getContactNumber();
if (contact1.equals(contact2) || contact1.equals(" 91" contact2) || contact2.equals(" 91" contact1)){
phoneContacts.get(j).setCheck(true);
PhoneContact contact11 = phoneContacts.get(j);
count = 1;
list2.add(contact11);
phoneContacts.remove(j);
}
}
if (count == 0)
{
list2.remove(contact);
count=0;
}
}
return list2;
}
здесь просто передайте свой Contact ArrayList и верните список повторяющихся контактов