2016-12-10 2 views
1

pourquoi il afficher les mêmes données dans recyclerviewpourquoi il afficher les mêmes données dans recyclerview

im essayant de chercher tous les contacts et la liste dans recyclervie mais afficher la même contact (MOYENS: si les contacts ont 50 puis affichera un contact 50 fois)

private void displayContacts() { 
    List<ContactsModel> arrayList = new ArrayList<ContactsModel>(); 
    ContactsModel data = new ContactsModel(); 

    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
      null, null, null, null); 
    if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 
      String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      if (Integer.parseInt(cur.getString(
        cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
       Cursor pCur = cr.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
         new String[]{id}, null); 
       while (pCur.moveToNext()) { 
        String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        data.set_id(id); 
        data.setName(name); 
        data.setNumber(phoneNo); 

        Log.e("test", "Name: " + name + ", Phone No: " + phoneNo); 
       } 

       pCur.close(); 
      } arrayList.add(data); 
     } 
    } 
    adapter = new ContactAdapter(arrayList, getApplicationContext()); 
    mRecyclerView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 


cur.close(); 

}

Répondre

0

Essayez, je l'ai fait quelques changements:

private void displayContacts() { 

     String name_check="start"; 
List<ContactsModel> arrayList = new ArrayList<ContactsModel>(); 
ContactsModel data = new ContactsModel(); 

ContentResolver cr = getContentResolver(); 
final Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
     null, null, null, null); 
if (cur.getCount() > 0) { 
    while (cur.moveToFirst()) { 
     do{ 
     String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 

     if (Integer.parseInt(cur.getString(
       cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor pCur = cr.query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
        new String[]{id}, null); 
      while (pCur.moveToNext()) { 
       String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if(name check.equals(name)){ 
      name_check = name; 
         data.set_id(id); 
         data.setName(name); 
         data.setNumber(phoneNo); 

         Log.e("test", "Name: " + name + ", Phone No: " + phoneNo); 
         arrayList.add(data); 
       } 
      } 

      pCur.close(); 
     } 
    } while(cur.moveToNext()); 
    } 
} 
adapter = new ContactAdapter(arrayList, getApplicationContext()); 
mRecyclerView.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 


    cur.close(); 
    } 
+1

merci pour les Ans, mais je l'ai résolu avant, mais maintenant je veux tous les contacts sans duplications –

+0

Vous pouvez mettre un simple si la condition. Pour cela, déclarez une variable pour le numéro de magasin dans chaque boucle et initialisez-la avec le nouveau numéro d'extraction après avoir satisfait aux conditions et ajoutez également des données dans la liste de tableau après la condition vrai. –

+0

pouvez-vous le montrer en codant .... –