2011-04-03 24 views
1

我已經在我的應用程序中實現了一個自動完成功能,但它僅接收聯繫人的姓名而不是數字。每當我在自動填充文本框中選擇一個字段時,都應該從手機的聯繫人列表中選擇號碼,並將其置於文本框中...請幫助我! :)如何在android中使用自動完成功能選擇聯繫人號碼?

公共類AutoMultipleContacts延伸活動{

private static final int PICK_CONTACT = 1; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.multipleselect); 

    Cursor peopleCursor = getContentResolver().query(Contacts.People.CONTENT_URI, PEOPLE_PROJECTION, null, null, Contacts.People.DEFAULT_SORT_ORDER); 
    ContactListAdapter contactadapter = new ContactListAdapter(this,peopleCursor); 
    MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView) findViewById(R.id.contacts); 
    textView.setAdapter(contactadapter); 
    textView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 
} 


public static class ContactListAdapter extends CursorAdapter implements Filterable { 
    public ContactListAdapter(Context context, Cursor c) { 
     super(context, c); 
     mContent = context.getContentResolver(); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     final LayoutInflater inflater = LayoutInflater.from(context); 
     final TextView view = (TextView) inflater.inflate(
       android.R.layout.simple_dropdown_item_1line, parent, false); 
     view.setText(cursor.getString(5)); 
     return view; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     ((TextView) view).setText(cursor.getString(5)); 
    } 

    @Override 
    public String convertToString(Cursor cursor) { 
     return cursor.getString(5); 
    } 

    @Override 
    public Cursor runQueryOnBackgroundThread(CharSequence constraint) { 
     if (getFilterQueryProvider() != null) { 
      return getFilterQueryProvider().runQuery(constraint); 
     } 

     StringBuilder buffer = null; 
     String[] args = null; 
     if (constraint != null) { 
      buffer = new StringBuilder(); 
      buffer.append("UPPER("); 
      buffer.append(Contacts.ContactMethods.NAME); 
      buffer.append(") GLOB ?"); 
      args = new String[] { constraint.toString().toUpperCase() + "*" }; 
     } 

     return mContent.query(Contacts.People.CONTENT_URI, PEOPLE_PROJECTION, 
       buffer == null ? null : buffer.toString(), args, 
       Contacts.People.DEFAULT_SORT_ORDER); 
    } 

    private ContentResolver mContent;   
} 

private static final String[] PEOPLE_PROJECTION = new String[] { 
    Contacts.People._ID, 
    Contacts.People.PRIMARY_PHONE_ID, 
    Contacts.People.TYPE, 
    Contacts.People.NUMBER, 
    Contacts.People.LABEL, 
    Contacts.People.NAME, 
}; 

}

回答

0

嘗試改變

@Override 
public String convertToString(Cursor cursor) { 
    return cursor.getString(5); 
} 

@Override 
public String convertToString(Cursor cursor) { 
    return cursor.getString(3); 
} 
+0

電話號碼必須附加到緩衝區,以便通過電話號碼搜索。 – Nerd 2012-06-21 21:21:34

0

追加PhoneNumberbuffer而不是Name並返回cursor.getString(3)setText(cursor.getString(3))。此外,People已被棄用。改爲使用ContactsContracts

相關問題