android多选联系人实现

            有很多网友问多选联系人实现方式,这里参考了apidemos的例子做了简单实现。

 

整体思路是使用使用一个ArrayList存放选中的联系人信息,细节就不说了,贴一下代码

 

 

public class CopyContactsListMultiple extends ListActivity implements OnClickListener{
	
	private final int UPDATE_LIST=1;
	ArrayList<String> contactsList; //得到的所有联系人
	ArrayList<String> 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<String>();
        getcontactsList=new ArrayList<String>();

        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<String>(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 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>


/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/

posted @ 2012-02-06 09:47  张兴业  阅读(599)  评论(0编辑  收藏  举报