android 多选联系人

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

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

  1. public
    class
    CopyContactsListMultiple
    extends
    ListActivity
    implements
    OnClickListener{
  2. private
    final
    int UPDATE_LIST=1;
  3. ArrayList contactsList;
    //得到的所有联系人
  4. ArrayList getcontactsList;
    //选择得到联系人
  5. private
    Button okbtn;
  6. private
    Button cancelbtn;
  7. private
    ProgressDialog proDialog;
  8. Thread getcontacts;
  9. Handler updateListHandler
    =
    new
    Handler()
    {
  10. public
    void handleMessage(Message
    msg)
    {
  11. switch
    (msg.what)
    {
  12. case UPDATE_LIST:
  13. if
    (proDialog
    !=
    null)
    {
  14. proDialog.dismiss();
  15. }
  16. updateList();
  17. }
  18. }
  19. };
  20. public
    void onCreate(Bundle
    savedInstanceState)
    {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.contactslist);
  23. contactsList=new
    ArrayList();
  24. getcontactsList=new
    ArrayList();
  25. final
    ListView listView
    = getListView();
  26. listView.setItemsCanFocus(false);
  27. listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
  28. okbtn=(Button)findViewById(R.id.contacts_done_button);
  29. cancelbtn=(Button)findViewById(R.id.contact_back_button);
  30. okbtn.setOnClickListener(this);
  31. cancelbtn.setOnClickListener(this);
  32. getcontacts=new
    Thread(new
    GetContacts());
  33. getcontacts.start();
  34. proDialog
    =
    ProgressDialog.show(CopyContactsListMultiple.this,
    “loading”,“loading”,
    true,
    true);
  35. }
  36. @Override
  37. protected
    void onResume()
    {
  38. // TODO Auto-generated method stub
  39. super.onResume();
  40. }
  41. void updateList(){
  42. if(contactsList!=null)
  43. setListAdapter(new
    ArrayAdapter(this,
  44. android.R.layout.simple_list_item_multiple_choice,
    contactsList));
  45. }
  46. @Override
  47. protected
    void onListItemClick(ListView
    l,
    View v,
    int position,
    long id)
    {
  48. // TODO Auto-generated method stub
  49. if(!((CheckedTextView)v).isChecked()){
  50. CharSequence num=((CheckedTextView)v).getText();
  51. getcontactsList.add(num.toString());
  52. }
  53. if(((CheckedTextView)v).isChecked()){
  54. CharSequence num=((CheckedTextView)v).getText();
  55. if((num.toString()).indexOf(“[")>0){
  56. String phoneNum=num.toString().substring(0,
    (num.toString()).indexOf("\n"));
  57. getcontactsList.remove(phoneNum);
  58. Log.d("remove_num",
    ""+phoneNum);
  59. }else{
  60. getcontactsList.remove(num.toString());
  61. Log.d("remove_num",
    ""+num.toString());
  62. }
  63. }
  64. super.onListItemClick(l,
    v, position,
    id);
  65. }
  66. class
    GetContacts
    implements
    Runnable{
  67. @Override
  68. public
    void run()
    {
  69. // TODO Auto-generated method stub
  70. Uri uri
    =
    ContactsContract.Contacts.CONTENT_URI;
  71. String[]
    projection =
    new
    String[]
    {
  72. ContactsContract.Contacts._ID,
  73. ContactsContract.Contacts.DISPLAY_NAME,
  74. ContactsContract.Contacts.PHOTO_ID
  75. };
  76. String selection
    =
    ContactsContract.Contacts.IN_VISIBLE_GROUP
    +
    “ = ’1′”;
  77. String[]
    selectionArgs =
    null;
  78. String sortOrder
    =
    ContactsContract.Contacts.DISPLAY_NAME
    +
    “ COLLATE LOCALIZED ASC”;
  79. Cursor cursor=managedQuery(uri,
    projection, selection,
    selectionArgs, sortOrder);
  80. Cursor phonecur
    =
    null;
  81. while
    (cursor.moveToNext()){
  82. // 取得联系人名字
  83. int nameFieldColumnIndex
    = cursor.getColumnIndex(android.provider.ContactsContract.PhoneLookup.DISPLAY_NAME);
  84. String name
    = cursor.getString(nameFieldColumnIndex);
  85. // 取得联系人ID
  86. String contactId
    = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID));
  87. phonecur
    = managedQuery(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
    null,
    android.provider.ContactsContract.CommonDataKinds.Phone.CONTACT_ID
    +
    “ = ”
    + contactId,
    null,
    null);
  88. // 取得电话号码(可能存在多个号码)
  89. while
    (phonecur.moveToNext()){
  90. String strPhoneNumber
    = phonecur.getString(phonecur.getColumnIndex(android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER));
  91. if(strPhoneNumber.length()>4)
  92. contactsList.add(“18610011001″+“\n测试”);
  93. //contactsList.add(strPhoneNumber+”\n”+name+”");
  94. }
  95. }
  96. if(phonecur!=null)
  97. phonecur.close();
  98. cursor.close();
  99. Message msg1=new
    Message();
  100. msg1.what=UPDATE_LIST;
  101. updateListHandler.sendMessage(msg1);
  102. }
  103. }
  104. @Override
  105. protected
    void onPause()
    {
  106. // TODO Auto-generated method stub
  107. super.onPause();
  108. }
  109. @Override
  110. protected
    void onDestroy()
    {
  111. contactsList.clear();
  112. getcontactsList.clear();
  113. super.onDestroy();
  114. }
  115. @Override
  116. public
    void onClick(View
    v)
    {
  117. // TODO Auto-generated method stub
  118. switch
    (v.getId())
    {
  119. case R.id.contacts_done_button:
  120. Intent i
    =
    new
    Intent();
  121. if(getcontactsList!=null>>getcontactsList.size()>0){
  122. Bundle b
    =
    new
    Bundle();
  123. b.putStringArrayList(“GET_CONTACT”,
    getcontactsList);
  124. i.putExtras(b);
  125. }
  126. setResult(RESULT_OK,
    i);
  127. CopyContactsListMultiple.this.finish();
  128. break;
  129. case R.id.contact_back_button:
  130. CopyContactsListMultiple.this.finish();
  131. break;
  132. default:
  133. break;
  134. }
  135. }
  136. @Override
  137. public
    boolean onKeyDown(int
    keyCode,
    KeyEvent event)
    {
  138. // TODO Auto-generated method stub
  139. if(keyCode==KeyEvent.KEYCODE_BACK){
  140. Intent i
    =
    new
    Intent();
  141. Bundle b
    =
    new
    Bundle();
  142. b.putStringArrayList(“GET_CONTACT”,
    getcontactsList);
  143. i.putExtras(b);
    // }
  144. setResult(RESULT_OK,
    i);
  145. }
  146. return
    super.onKeyDown(keyCode,
    event);
  147. }
  148. }

xml:

  1. <?xml version=“1.0″
    encoding=“utf-8″?>
  2. <LinearLayout
    xmlns:android=“http://schemas.android.com/apk/res/android”
  3. android:orientation=“vertical”
    android:layout_width=“fill_parent”
  4. android:layout_height=“fill_parent”>
  5. <ListView
    android:id=“@+id/android:list”
  6. android:layout_height=“fill_parent”
  7. android:layout_width=“fill_parent”
  8. android:layout_marginLeft=“10dip”
  9. android:layout_marginRight=“10dip”
  10. android:layout_marginTop=“10dip”
  11. android:layout_weight=“1.0″>
  12. </ListView>
  13. <LinearLayout
    android:layout_width=“fill_parent”
  14. android:layout_height=“wrap_content”
  15. android:layout_weight=“0″
    android:orientation=“horizontal”
  16. android:gravity=“center”
    android:layout_marginLeft=“10dip”
  17. android:layout_marginRight=“10dip”
    android:layout_marginBottom=“10dip”
  18. android:weightSum=“1″>
  19. <Button
    android:id=“@+id/contacts_done_button”
  20. android:textSize=“17dip”
  21. android:layout_marginRight=“10dip”
    android:layout_width=“0dip”
  22. android:layout_height=“wrap_content”
    android:layout_weight=“0.35″
  23. android:text=“sure”
    />
  24. <Button
    android:id=“@+id/contact_back_button”
  25. android:layout_marginLeft=“10dip”
    android:textSize=“17dip”
  26. android:layout_width=“0dip”
    android:layout_height=“wrap_content”
  27. android:layout_weight=“0.35″
    android:text=“back”
    />
  28. </LinearLayout>
  29. </LinearLayout>

效果如图:

时间: 2024-12-14 08:42:12

android 多选联系人的相关文章

点击按钮-Android多选模式如何获得选中项

问题描述 Android多选模式如何获得选中项 我定义了一个按钮,点击按钮然后弹出对话框,当点击确定时,就删除选中条目,但是获取不了选中项的id,所以一直报空指向,怎么解决 public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (gridView.getVisibility() == View.GONE) { selectitems = listView.getCheckedItemPositions();

Android复选框对话框用法实例简析_Android

本文实例分析了Android复选框对话框用法.分享给大家供大家参考,具体如下: /** * 创建筛选复选框对话框 * @param guoguanglist 联赛名 * @param flags 是否选择 * @create_time 2011-10-26 下午3:59:54 */ private void initFilterDialog(String[] iNamelist, final boolean[] iFlags) { Builder builder = new android.ap

android 写入系统联系人失败

问题描述 android 写入系统联系人失败 请大家看看这个写入为啥会报错啊,刚学习安卓 先谢谢大家 protected void addContacts() { // TODO Auto-generated method stub ContentValues values = new ContentValues(); Uri uri = null; try{ //写入失败需查找原因 values.put(ContactsContract.CommonDataKinds.Phone.DISPLA

android如何获取联系人列表,我下面这样获取错在哪

问题描述 android如何获取联系人列表,我下面这样获取错在哪 我写了一个安卓小程序,需要获取联系人姓名·和号码,下面的代码是我查资料得来的,可是运行不成功,错在哪 private Thread t1 ; private ReadNameAndNum rnan; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(save

Android 获取手机联系人实例代码详解_Android

我的风格,废话不多说了,直接给大家贴代码了. 具体代码如下所示: package com.org.demo.demo; import com.org.wangfeng.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Butt

Android编程操作联系人的方法(查询,获取,添加等)_Android

本文实例讲述了Android编程操作联系人的方法.分享给大家供大家参考,具体如下: Android系统中的联系人也是通过ContentProvider来对外提供数据的,我们这里实现获取所有联系人.通过电话号码获取联系人.添加联系人.使用事务添加联系人. 获取所有联系人 1. Android系统中的联系人也是通过ContentProvider来对外提供数据的 2. 数据库路径为:/data/data/com.android.providers.contacts/database/contacts2

Android获取手机联系人电话号码并返回结果_Android

之前做了一个小练习需要用到获取手机里联系人的电话号码,通过查阅相关的资料,自己尝试写了一个小例子,可以成功获取. 首先需要在AndroidManifest.xml中获取权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> xml布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro

Android复选框对话框用法实例简析

本文实例分析了Android复选框对话框用法.分享给大家供大家参考,具体如下: /** * 创建筛选复选框对话框 * @param guoguanglist 联赛名 * @param flags 是否选择 * @create_time 2011-10-26 下午3:59:54 */ private void initFilterDialog(String[] iNamelist, final boolean[] iFlags) { Builder builder = new android.ap

Android编程操作联系人的方法(查询,获取,添加等)

本文实例讲述了Android编程操作联系人的方法.分享给大家供大家参考,具体如下: Android系统中的联系人也是通过ContentProvider来对外提供数据的,我们这里实现获取所有联系人.通过电话号码获取联系人.添加联系人.使用事务添加联系人. 获取所有联系人 1. Android系统中的联系人也是通过ContentProvider来对外提供数据的 2. 数据库路径为:/data/data/com.android.providers.contacts/database/contacts2