我正在开发一个应用程序,我需要向用户显示所有联系人。 应该为用户提供选择多个联系人的选项,当他按下完成后,所有联系人都必须存储在数据库中。
任何人都可以帮助我使用代码来显示和提取所选择的联系人吗?{即使thr为多个同名的人也不能选择一个}
如果您可以让选定的联系人姓名显示在敬酒中{我将自己做DB部分},我将不胜感激......
Plz帮助.......
答案 0 :(得分:0)
您需要使用CHOICE_MODE_MULTIPLE
创建自己的联系人列表视图,并使用CheckTextView
作为单个项目布局。以下是一个完整的例子。它在操作栏上有完成按钮。
public class PickContactsActivity extends ListActivity {
private SimpleCursorAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getListView().setItemsCanFocus(false);
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME},
null, null, "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
mAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_multiple_choice,
cursor,
new String[] { ContactsContract.Contacts.DISPLAY_NAME },
new int[] { android.R.id.text1 }, 0);
setListAdapter(mAdapter);
}
private List<Uri> pickContacts() {
SparseBooleanArray a = getListView().getCheckedItemPositions();
List<Uri> contacts = new ArrayList<Uri>();
for (int i=0; i<a.size(); i++) {
if (a.valueAt(i)) {
Cursor c = (Cursor)mAdapter.getItem(a.keyAt(i));
Long id = c.getLong(c.getColumnIndex(ContactsContract.Contacts._ID));
contacts.add(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id));
}
}
return contacts;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_pick:
List<Uri> contacts = pickContacts();
StringBuilder sb = new StringBuilder("Selected Contacts\n");
for(Uri c : contacts)
sb.append(c).append("\n");
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
}
完成操作在 res / menu / main.xml 中定义
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_pick" android:showAsAction="ifRoom" android:title="Done"/>
</menu>
最后,请确保您拥有阅读联系人的权限。将其添加到 AndroidManifest.xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
只需删除显示Toast消息的代码,然后使用Uri列表执行数据库操作。