2013-12-02 8 views
1

Я хочу, чтобы загрузить контакты из андроида устройства я использовал различные методы, но контакты нагрузки настолько медленно,нагрузка контакты как Viber в Android

  • Я использую CommanDataKinds,
  • Я получаю индекс столбца из цикла (только один, затем используйте эту переменную в цикле).

также я хочу использовать быструю технику прокрутки, например, viber.

Что именно мне нужно список контактов Viber, Это быстро, секции использование, быстрая прокрутка и т.д ..

enter image description here

+0

Читайте на http://www.anddev.org/tutusing_alphabetindexer_for_fastscrolling_listview-t10282.html. –

ответ

1

попробовать с этим чувак :) удачи

public class ReadContacts extends AsyncTask<Void, Void, Void>{ 
    private ListView contactsList; 

    private Context cntx; 
    private Constant constants; 

    static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { 
     Contacts._ID, // 0 
     Contacts.DISPLAY_NAME, // 1 
     Contacts.STARRED, // 2 
     Contacts.TIMES_CONTACTED, // 3 
     Contacts.CONTACT_PRESENCE, // 4 
     Contacts.PHOTO_ID, // 5 
     Contacts.LOOKUP_KEY, // 6 
     Contacts.HAS_PHONE_NUMBER, // 7 
    }; 

    private long contactId; 
    private String display_name; 
    private String phoneNumber; 

    private ArrayList<ContactsWrapper>contactWrap = new ArrayList<ContactsWrapper>(); 
    private HashMap<Long, ArrayList<ContactsWrapper>>map = new HashMap<Long, ArrayList<ContactsWrapper>>(); 

    private ContactsAdapter adapter; 

    private DataController controller; 

    public ReadContacts(Context cntx, ListView contactList) { 
     // TODO Auto-generated constructor stub 
     this.cntx = cntx; 
     constants = new Constant(); 
     this.contactsList = contactList; 

     controller = DataController.getInstance(); 
    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     if(!(controller.contactWrapper.size()>0)) 
      constants.displayProgressDialog(cntx, "Loading Contacts...", "Please Wait"); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     if(!(controller.contactWrapper.size()>0)) 
     { 
     try { 
      String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" 
        + Contacts.HAS_PHONE_NUMBER + "=1) AND (" 
        + Contacts.DISPLAY_NAME + " != ''))"; 

      Cursor c = cntx.getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, 
        null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

      int colorcounter = 0; 
      String[] colorcounter_array = { "#91A46B", "#8BB6B5", "#CAA973", "#8DA6C8","#D19B8D"}; 

      int color_string; 
      for(int i=0;i<c.getCount();i++) 
      { 
//    contactWrap.clear(); 
       try { 
        contactId = 0; 
        String hasPhone = ""; 
        display_name = ""; 
        phoneNumber = ""; 

        c.moveToPosition(i); 

        contactId = c.getLong(0); 
        display_name = c.getString(1); 
        hasPhone = c.getString(7); 

        if (hasPhone.equalsIgnoreCase("1")) 
         hasPhone = "true"; 
        else 
         hasPhone = "false" ; 

        if (Boolean.parseBoolean(hasPhone)) 
        { 
         Cursor phones = cntx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
         while (phones.moveToNext()) 
         { 
          int indexPhoneType = phones.getColumnIndexOrThrow(Phone.TYPE); 
          String phoneType = phones.getString(indexPhoneType); 

          phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

          String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 

          if (colorcounter < 5) 
          { 
           color_string =Color.parseColor(colorcounter_array[colorcounter]); 
           colorcounter++; 
          } else { 
           colorcounter = 0; 
           color_string =Color.parseColor(colorcounter_array[colorcounter]); 
           colorcounter++; 
          } 
          contactWrap.add(new ContactsWrapper(contactId, display_name, phoneNumber,lookupKey,false,color_string)); 
         } 
//      map.put(contactId, new ArrayList<ContactsWrapper>(contactWrap)); 
         phones.close(); 
        } 
       } catch (Exception e) { 

        e.printStackTrace(); 
       } 
      } 
      controller.contactWrapper = contactWrap; 
     } 
     catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     constants.dismissDialog(); 

     adapter = new ContactsAdapter(cntx); 
     contactsList.setAdapter(adapter); 
    } 

} 

и это мой контактный оберточный класс

public class ContactsWrapper { 

private long contactId; 
private String displayName,displayNumber,lookUp; 
public boolean checked = true; 
int color_string; 

public ContactsWrapper(long contactId, String displayName, String displayNumber, String lookUp, boolean checked,int color_string) { 
    // TODO Auto-generated constructor stub 
    this.contactId = contactId; 
    this.displayName = displayName; 
    this.displayNumber = displayNumber; 
    this.lookUp = lookUp; 
    this.checked = checked; 
    this.color_string =color_string; 
} 

public String getLookUp() { 
    return lookUp; 
} 

public int getColor_string() { 
    return color_string; 
} 

public boolean isChecked() { 
    return checked; 
} 

public long getContactId() { 
    return contactId; 
} 

public String getDisplayName() { 
    return displayName; 
} 

public String getDisplayNumber() { 
    return displayNumber; 
} 

public void setChecked(boolean checked) { 
    this.checked = checked; 
} 
} 
0

Оформить заказ sample для поиска контактов и отображения в виде списка, например fastscroll.

Смежные вопросы