2

我正在嘗試學習如何在Android應用程序中創建自動完成textview,並根據用戶輸入的匹配聯繫人名稱的一部分的字母,爲他們的聯繫人提供聯繫人下拉列表。獲取號碼的聯繫人名稱的自動完成textview?

我該如何做到這一點?我花了幾個小時沒有找到一個完整的解決方案,我認爲這很奇怪。

任何幫助,將不勝感激!

感謝,

初學者Android開發者

更多詳細信息: 我希望有類似的默認短信應用,在那裏我將能夠開始輸入名稱的收件人框中的文本框一個聯繫人,以及聯繫人姓名和他們的號碼的建議會出現,我可以點擊並用我點擊的那個聯繫人的號碼填充我的文本框。

+0

我發現我的解決方案在這裏:http://stackoverflow.com/questions/12400504/selecting-contact-from-autocomplete-textview?rq=1 – Regnarg

回答

1

嗨,你能解決你需要什麼?

http://developer.android.com/guide/topics/ui/controls/text.html#AutoComplete

只要你有你的聯繫人列表中的一個字符串數組,它會允許你使用這個API。

====================================

根據你添加的註釋,它看起來像你還需要什麼這個帖子在grabContacts()ContentResolver的查詢,然後從遊標創建一個字符串數組作爲在後提出的那樣:

Android - Autocomplete with contacts

kedark的解決方案是很好的,完整的,儘管這種特殊的方法可能會多一點很容易理解,適合初學者)

private Cursor grabContacts(){ 
    // Form an array specifying which columns to return. 
    String[] projection = new String[] {People._ID, People.NAME}; 

    // Get the base URI for the People table in the Contacts content provider. 
    Uri contacts = People.CONTENT_URI; 

    // Make the query. 
    Cursor managedCursor = managedQuery(contacts, projection, null, null, People.NAME + " ASC"); // Put the results in ascending order by name 
    startManagingCursor(managedCursor); 
    return managedCursor; 
} 

可以給予好評他們,如果這有助於:)

+0

謝謝,但並不完全。我希望有一個類似於默認消息應用程序的收件箱的文本框,在那裏我可以開始輸入聯繫人的姓名,並且會出現聯繫人姓名及其編號的建議,我可以點擊它用我點擊的那個聯繫人的號碼填充我的文本框。 – Regnarg

2

你可以用這一個嘗試:

你如何修改要顯示的UI

//我只是硬編碼數retrive數和追加。

public class MainActivity extends Activity implements TextWatcher { 

String[] arrcontact = null; 
AutoCompleteTextView myAutoComplete; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myAutoComplete = (AutoCompleteTextView) findViewById(R.id.multiAutoCompleteTextView1); 

    loadContact(); 

    myAutoComplete.addTextChangedListener(this); 
    myAutoComplete.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_dropdown_item_1line, arrcontact)); 
} 

private void loadContact() { 
    Cursor cursor = getContacts(); 
    arrcontact = new String[30]; 

    int count = 0; 

    while (cursor.moveToNext()) { 
     String displayName = cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 


     arrcontact[count] = displayName + "\n" + "908228282"; 
     count++; 
     if (count == 30) 
      break; 

    } 
} 

private Cursor getContacts() { 
    // Run query 
    final ContentResolver cr = getContentResolver(); 
    String[] projection = { ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.Contacts._ID }; 
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = ?"; 
    String[] selectionArgs = { "1" }; 
    final Cursor contacts = cr.query(ContactsContract.Contacts.CONTENT_URI, 
      projection, selection, selectionArgs, "UPPER(" 
        + ContactsContract.Contacts.DISPLAY_NAME + ") ASC"); 
    return contacts; 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void afterTextChanged(Editable arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
     int arg3) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 

} 

}

0

我更新Kedark的loadContact()例程用於任何長度的聯繫人列表(見下文),否則工作就工作得很好。謝謝!

private String[] loadContactList() { 
     String[] contactArray; 
     Cursor cursor = getContacts(); 

     contactArray = new String[cursor.getCount()]; 

     int count = 0; 

     while (cursor.moveToNext()) { 
      String displayName = cursor.getString(cursor 
        .getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
      contactArray[count] = displayName; 
      count++; 
     } 
     cursor.close(); 
     return(contactArray); 
    } 
相關問題