我正在尝试学习如何在Android应用中制作自动完成文本视图,根据用户输入的与联系人姓名的一部分相匹配的字母,可以在其中显示联系人的下拉列表。
我将如何做到这一点?我在google上花了好几个小时而没有找到完整的解决方案,我觉得这很奇怪。
任何帮助将不胜感激!
谢谢,
初学Android开发者
更多细节: 我希望有一个类似于默认消息传递应用程序的收件人框的文本框,我可以在其中输入联系人的姓名,并显示联系人姓名及其编号的建议,我可以点击这些用我点击的那个联系人的号码填写我的文本框。
答案 0 :(得分:2)
你可以试试这个:
修改您希望显示UI的方式
//我只是对数字进行硬编码,然后追加数字并附加。
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
}
}
答案 1 :(得分:1)
嗨,这可以解决你的需求吗?
http://developer.android.com/guide/topics/ui/controls/text.html#AutoComplete
只要您在StringArray中有联系人列表,就可以使用此API。
====================================
根据您添加的评论,您似乎还需要这篇文章在抓住联系方式中使用 ContentResolver 和查询进行的操作,以及然后从帖子中创建一个StringArray,如帖子所示:
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;
}
如果有帮助,你可以投票给他们:)
答案 2 :(得分: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);
}