2011-11-09 25 views
0

顯示用戶聯繫人列表的類。用戶聯繫人 - android

問題是它顯示所有聯繫人,包括那些沒有電話號碼的人。

我不會添加項目,如果沒有號碼。由於缺乏經驗,我不知道該怎麼做。

如果任何人有任何想法,我會很樂意幫助)

謝謝

public class Test extends ListActivity { 
     static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { 
       Contacts._ID, 
       Contacts.DISPLAY_NAME, 
       Contacts.STARRED, 
       Contacts.TIMES_CONTACTED, 
       Contacts.CONTACT_PRESENCE, 
       Contacts.PHOTO_ID, 
       Contacts.LOOKUP_KEY, 
       Contacts.HAS_PHONE_NUMBER     
     }; 

     static final int SUMMARY_ID_COLUMN_INDEX = 0; 
     static final int SUMMARY_NAME_COLUMN_INDEX = 1; 
     static final int SUMMARY_STARRED_COLUMN_INDEX = 2; 
     static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3; 
     static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4; 
     static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5; 
     static final int SUMMARY_LOOKUP_KEY = 6; 
     static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" 
       + Contacts.HAS_PHONE_NUMBER + "=1) AND (" 
       + Contacts.DISPLAY_NAME + " != ''))"; 
     Cursor c = 
       getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, 
       null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 
     startManagingCursor(c); 

     ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.main, c); 
     setListAdapter(adapter); 

    } 

    private final class ContactListItemAdapter extends ResourceCursorAdapter { 
     public ContactListItemAdapter(Context context, int layout, Cursor c) { 
      super(context, layout, c); 
     } 

     @Override 
     public void bindView(View view, Context context, Cursor cursor) { 
      final ContactListItemCache cache = (ContactListItemCache) view.getTag(); 

      cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer); 
      int size = cache.nameBuffer.sizeCopied; 

      cursor.copyStringToBuffer(SUMMARY_HAS_PHONE_COLUMN_INDEX, cache.numberView); 
      int number = cache.numberView.sizeCopied; 

      cache.nameView.setText(cache.nameBuffer.data, 0, size); 
      cache.numView.setText(cache.numberView.data, 0, number); 
      final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX); 
      final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY); 
      cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey)); 

     } 

     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      View view = super.newView(context, cursor, parent); 
      ContactListItemCache cache = new ContactListItemCache(); 
      cache.nameView = (TextView) view.findViewById(R.id.name); 
      cache.numView = (TextView) view.findViewById(R.id.number); 
      cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge); 
      view.setTag(cache); 

      return view; 
     } 
    } 

    final static class ContactListItemCache { 
     public TextView nameView; 
     public TextView numView; 
     public CharArrayBuffer numberView = new CharArrayBuffer(128); 
     public QuickContactBadge photoView; 
     public CharArrayBuffer nameBuffer = new CharArrayBuffer(128); 
    } 

回答

0

你的邏輯是完全正確。我建議你把你的選擇縮小到:

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + "=" + 1; 

看看你會得到什麼結果。之後添加其他約束。