有很多网友问多选联系人实现方式,这里参考了apidemos的例子做了简单实现。
整体思路是使用使用一个ArrayList存放选中的联系人信息,细节就不说了,贴一下代码
- public
class
CopyContactsListMultiple
extends
ListActivity
implements
OnClickListener{ - private
final
int UPDATE_LIST=1; - ArrayList contactsList;
//得到的所有联系人 - ArrayList getcontactsList;
//选择得到联系人 - private
Button okbtn; - private
Button cancelbtn; - private
ProgressDialog proDialog; - Thread getcontacts;
- Handler updateListHandler
=
new
Handler()
{ - public
void handleMessage(Message
msg)
{ - switch
(msg.what)
{ - case UPDATE_LIST:
- if
(proDialog
!=
null)
{ - proDialog.dismiss();
- }
- updateList();
- }
- }
- };
- public
void onCreate(Bundle
savedInstanceState)
{ - super.onCreate(savedInstanceState);
- setContentView(R.layout.contactslist);
- contactsList=new
ArrayList(); - getcontactsList=new
ArrayList(); - final
ListView listView
= getListView(); - listView.setItemsCanFocus(false);
- listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
- okbtn=(Button)findViewById(R.id.contacts_done_button);
- cancelbtn=(Button)findViewById(R.id.contact_back_button);
- okbtn.setOnClickListener(this);
- cancelbtn.setOnClickListener(this);
- getcontacts=new
Thread(new
GetContacts()); - getcontacts.start();
- proDialog
=
ProgressDialog.show(CopyContactsListMultiple.this,
“loading”,“loading”,
true,
true); - }
- @Override
- protected
void onResume()
{ - // TODO Auto-generated method stub
- super.onResume();
- }
- void updateList(){
- if(contactsList!=null)
- setListAdapter(new
ArrayAdapter(this, - android.R.layout.simple_list_item_multiple_choice,
contactsList)); - }
- @Override
- protected
void onListItemClick(ListView
l,
View v,
int position,
long id)
{ - // TODO Auto-generated method stub
- if(!((CheckedTextView)v).isChecked()){
- CharSequence num=((CheckedTextView)v).getText();
- getcontactsList.add(num.toString());
- }
- if(((CheckedTextView)v).isChecked()){
- CharSequence num=((CheckedTextView)v).getText();
- if((num.toString()).indexOf(“[")>0){
- String phoneNum=num.toString().substring(0,
(num.toString()).indexOf("\n")); - getcontactsList.remove(phoneNum);
- Log.d("remove_num",
""+phoneNum); - }else{
- getcontactsList.remove(num.toString());
- Log.d("remove_num",
""+num.toString()); - }
- }
- super.onListItemClick(l,
v, position,
id); - }
- class
GetContacts
implements
Runnable{ - @Override
- public
void run()
{ - // TODO Auto-generated method stub
- Uri uri
=
ContactsContract.Contacts.CONTENT_URI; - String[]
projection =
new
String[]
{ - ContactsContract.Contacts._ID,
- ContactsContract.Contacts.DISPLAY_NAME,
- ContactsContract.Contacts.PHOTO_ID
- };
- String selection
=
ContactsContract.Contacts.IN_VISIBLE_GROUP
+
“ = ’1′”; - String[]
selectionArgs =
null; - String sortOrder
=
ContactsContract.Contacts.DISPLAY_NAME
+
“ COLLATE LOCALIZED ASC”; - Cursor cursor=managedQuery(uri,
projection, selection,
selectionArgs, sortOrder); - Cursor phonecur
=
null; - while
(cursor.moveToNext()){ - // 取得联系人名字
- int nameFieldColumnIndex
= cursor.getColumnIndex(android.provider.ContactsContract.PhoneLookup.DISPLAY_NAME); - String name
= cursor.getString(nameFieldColumnIndex); - // 取得联系人ID
- String contactId
= cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID)); - phonecur
= managedQuery(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
android.provider.ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+
“ = ”
+ contactId,
null,
null); - // 取得电话号码(可能存在多个号码)
- while
(phonecur.moveToNext()){ - String strPhoneNumber
= phonecur.getString(phonecur.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER)); - if(strPhoneNumber.length()>4)
- contactsList.add(“18610011001″+“\n测试”);
- //contactsList.add(strPhoneNumber+”\n”+name+”");
- }
- }
- if(phonecur!=null)
- phonecur.close();
- cursor.close();
- Message msg1=new
Message(); - msg1.what=UPDATE_LIST;
- updateListHandler.sendMessage(msg1);
- }
- }
- @Override
- protected
void onPause()
{ - // TODO Auto-generated method stub
- super.onPause();
- }
- @Override
- protected
void onDestroy()
{ - contactsList.clear();
- getcontactsList.clear();
- super.onDestroy();
- }
- @Override
- public
void onClick(View
v)
{ - // TODO Auto-generated method stub
- switch
(v.getId())
{ - case R.id.contacts_done_button:
- Intent i
=
new
Intent(); - if(getcontactsList!=null>>getcontactsList.size()>0){
- Bundle b
=
new
Bundle(); - b.putStringArrayList(“GET_CONTACT”,
getcontactsList); - i.putExtras(b);
- }
- setResult(RESULT_OK,
i); - CopyContactsListMultiple.this.finish();
- break;
- case R.id.contact_back_button:
- CopyContactsListMultiple.this.finish();
- break;
- default:
- break;
- }
- }
- @Override
- public
boolean onKeyDown(int
keyCode,
KeyEvent event)
{ - // TODO Auto-generated method stub
- if(keyCode==KeyEvent.KEYCODE_BACK){
- Intent i
=
new
Intent(); - Bundle b
=
new
Bundle(); - b.putStringArrayList(“GET_CONTACT”,
getcontactsList); - i.putExtras(b);
// } - setResult(RESULT_OK,
i); - }
- return
super.onKeyDown(keyCode,
event); - }
- }
xml:
- <?xml version=“1.0″
encoding=“utf-8″?> - <LinearLayout
xmlns:android=“http://schemas.android.com/apk/res/android” - android:orientation=“vertical”
android:layout_width=“fill_parent” - android:layout_height=“fill_parent”>
- <ListView
android:id=“@+id/android:list” - android:layout_height=“fill_parent”
- android:layout_width=“fill_parent”
- android:layout_marginLeft=“10dip”
- android:layout_marginRight=“10dip”
- android:layout_marginTop=“10dip”
- android:layout_weight=“1.0″>
- </ListView>
- <LinearLayout
android:layout_width=“fill_parent” - android:layout_height=“wrap_content”
- android:layout_weight=“0″
android:orientation=“horizontal” - android:gravity=“center”
android:layout_marginLeft=“10dip” - android:layout_marginRight=“10dip”
android:layout_marginBottom=“10dip” - android:weightSum=“1″>
- <Button
android:id=“@+id/contacts_done_button” - android:textSize=“17dip”
- android:layout_marginRight=“10dip”
android:layout_width=“0dip” - android:layout_height=“wrap_content”
android:layout_weight=“0.35″ - android:text=“sure”
/> - <Button
android:id=“@+id/contact_back_button” - android:layout_marginLeft=“10dip”
android:textSize=“17dip” - android:layout_width=“0dip”
android:layout_height=“wrap_content” - android:layout_weight=“0.35″
android:text=“back”
/> - </LinearLayout>
- </LinearLayout>
效果如图:
时间: 2024-12-14 08:42:12