带复选框的 Android 联系人选择器 [英] Android Contact Picker With Checkbox

查看:22
本文介绍了带复选框的 Android 联系人选择器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有很多关于同一主题的讨论,但在这里呆了 4 个小时后,我找不到有效的描述或链接来制作带有复选框的联系人选择器.

There are a lot of discussions going on about the same subject, but after spending 4 hours here, I could not find a valid description or a link to make a Contact Picker with Checkbox.

我有一个带有 DONE 按钮和带有 checkboxlistview 的活动.我设法正确显示了联系人.现在我想在 bundle(我认为最好的方法)中返回选定的联系电话号码,以便我可以在 onActivityResult() 中获取号码列表.我不确定我遵循的方式是否正确.

I have an activity with DONE button and listview with checkbox. I have managed to show the contacts correctly. Now I want to return the selected contact phone numbers in a bundle (I think the best way) so that I can get the list of numbers in onActivityResult(). I am not sure of the way I am following is right or not.

这是我的代码:

public class ContactPickerMulti extends ListActivity implements OnClickListener {

    // List variables
    public String[] Contacts = {};
    public int[] to = {};
    public ListView myListView;

    Button save_button;
    private TextView phone;
    private String phoneNumber;
    private Cursor cursor;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contacts_multi);

        // Initializing the buttons according to their ID
        save_button = (Button) findViewById(R.id.contact_done);

        // Defines listeners for the buttons
        save_button.setOnClickListener(this);

        Cursor mCursor = getContacts();
        startManagingCursor(mCursor);

        ListAdapter adapter = new SimpleCursorAdapter(
                this,
                android.R.layout.simple_list_item_multiple_choice,
                mCursor,
                Contacts = new String[] { ContactsContract.Contacts.DISPLAY_NAME },
                to = new int[] { android.R.id.text1 });

        setListAdapter(adapter);
        myListView = getListView();
        myListView.setItemsCanFocus(false);
        myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    }

    private Cursor getContacts() {
        // Run query
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String[] projection = new String[] { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME };
        String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '"
                + ("1") + "'";
        String[] selectionArgs = null;
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
                + " COLLATE LOCALIZED ASC";

        return managedQuery(uri, projection, selection, selectionArgs,
                sortOrder);
    }

    public void onClick(View src) {
        Intent i;
        switch (src.getId()) {
        case R.id.contact_done:

            SparseBooleanArray selectedPositions = myListView
                    .getCheckedItemPositions();
            SparseBooleanArray checkedPositions = myListView
                    .getCheckedItemPositions();
            if (checkedPositions != null) {
                for (int k = 0; k < checkedPositions.size(); k++) {
                     if (checkedPositions.valueAt(k)) {
                          String name =
                                 ((Cursor)myListView.getAdapter().getItem(k)).getString(1);
                            Log.i("XXXX",name + " was selected");
                        }
                }
            }

            break;
        }

    }
}

我想将数字作为数组或列表发送.做这个的最好方式是什么?任何帮助或导致正确路径的高度赞赏.

I want to send the numbers as array or list. What is the best way to do this? Any help or leading to right path is highly appreciated.

推荐答案

我在 onClick 中使用了这段代码:

I use this code in onClick:

long[] id = getListView().getCheckedItemIds();//  i get the checked contact_id instead of position
        phoneNumber = new String[id.length];
        for (int i = 0; i < id.length; i++) {

            phoneNumber[i] = getPhoneNumber(id[i]); // get phonenumber from selected id

        }

        Intent pickContactIntent = new Intent();
        pickContactIntent.putExtra("PICK_CONTACT", phoneNumber);// Add checked phonenumber in intent and finish current activity.
        setResult(RESULT_OK, pickContactIntent);
        finish();

//

private String getPhoneNumber(long id) {
    String phone = null;
    Cursor phonesCursor = null;
    phonesCursor = queryPhoneNumbers(id);
    if (phonesCursor == null || phonesCursor.getCount() == 0) {
        // No valid number
        signalError();
        return null;
    } else if (phonesCursor.getCount() == 1) {
        // only one number, call it.
        phone = phonesCursor.getString(phonesCursor
                .getColumnIndex(Phone.NUMBER));
    } else {
        phonesCursor.moveToPosition(-1);
        while (phonesCursor.moveToNext()) {

            // Found super primary, call it.
            phone = phonesCursor.getString(phonesCursor
                    .getColumnIndex(Phone.NUMBER));
            break;

        }
    }

    return phone;
}


private Cursor queryPhoneNumbers(long contactId) {
    ContentResolver cr = getContentResolver();
    Uri baseUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
            contactId);
    Uri dataUri = Uri.withAppendedPath(baseUri,
            ContactsContract.Contacts.Data.CONTENT_DIRECTORY);

    Cursor c = cr.query(dataUri, new String[] { Phone._ID, Phone.NUMBER,
            Phone.IS_SUPER_PRIMARY, RawContacts.ACCOUNT_TYPE, Phone.TYPE,
            Phone.LABEL }, Data.MIMETYPE + "=?",
            new String[] { Phone.CONTENT_ITEM_TYPE }, null);
    if (c != null && c.moveToFirst()) {
        return c;
    }
    return null;
}

以及您启动的最后一个 onActivityResult 活动 PickContactsActivity

And the last onActivityResult of activity which you start PickContactsActivity

    // TODO Auto-generated method stub
    // super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

        if (requestCode == Constants.REQUEST_CODE_PICK_CONTACT) {


            if (data != null) {

                String[] temp = data.getStringArrayExtra("PICK_CONTACT");

            }
        }

    }

}

这篇关于带复选框的 Android 联系人选择器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆