0

我正在开发一个应用程序,我需要在其中向用户显示所有联系人。应该为用户提供选择多个联系人的选项,当他按下完成时,所有联系人都必须存储在数据库中。

任何人都可以帮助我显示和提取所选联系人的代码吗??{即使同名有多个 no,也必须选择一个 no }

如果您可以让所选联系人的姓名显示在敬酒中{我将自己做数据库部分},我将不胜感激......

请帮助.......

4

1 回答 1

0

您需要创建自己的联系人列表视图,CHOICE_MODE_MULTIPLE并将 aCheckTextView用于单个项目布局。下面是一个完整的例子。它在操作栏上有“完成”按钮。

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 列表执行您的数据库操作。

于 2013-04-17T22:33:42.083 回答