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.
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.
Here is my code:
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.
When using
startActivityForResult(newActivity)
in thenewActivity
you must make a call tosetResult(RESULT_OK)
followed byfinish()
to close theActivity
. Optionally you can include anIntent
in the call tosetResult(RESULT_OK, intent)
. The call tosetResult()
will lead to calling your implementation ofonActivityResult()
where you can handle the result of theActivity
. So in your case you would just create anIntenet
and add your array list to it using one of theputExtra()
methods. ThatIntent
will then be passed toonActivityResult()
where you can extract that information. See Intent and Activity for more information.I use this code in
onClick
://
And the last
onActivityResult
of activity which you startPickContactsActivity