android 功能模块之通讯模块

来源:互联网 发布:apache 2.2.21 漏洞 编辑:程序博客网 时间:2024/05/16 04:18

Android通讯录开发之实现全选、反选功能


2014年1月15日 

实现全选、反选不是什么难的事情,就只是用另外一个数据结构来存储被选中的状态,通过刷新列表来更新列表的显示状态。下面是实现效果:



定义一个散列表来存储选中状态
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. // 用于保存勾选的联系人  
  2.     private HashMap<Contact, Boolean> map_NumberSelected = new HashMap<Contact, Boolean>();  

定义标识表示是否已经全选
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. private boolean isAllChecked = false;  

在触发事件的位置根据标识来实现全选或反选
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. if (isAllChecked) {  
  2.                 selectAllBtn.setBackgroundResource(R.drawable.select_all_not);  
  3.                 invertSelection();  
  4.             } else {  
  5.                 selectAllBtn.setBackgroundResource(R.drawable.select_all);  
  6.                 selectAllContacts();  
  7.             }  


全选方法
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public void selectAllContacts() {  
  2.         for (int i = 0; i < contactList.size(); i++) {  
  3.             Contact contact = contactList.get(i);  
  4.             map_NumberSelected.put(contact, true);  
  5.         }  
  6.         isAllChecked = true;  
  7.         refreshList();  
  8.     }  

反选方法
[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public void invertSelection() {  
  2.         for (int i = 0; i < contactList.size(); i++) {  
  3.             Contact contact = contactList.get(i);  
  4.             map_NumberSelected.put(contact, false);  
  5.         }  
  6.         isAllChecked = false;  
  7.         refreshList();  
  8.     }  


上面用到contactList是你得到的数据源,是一个List<Contact>,它跟map_NumberSelected都通过adapter里面定义的set方法注入到adapter里,所以选中状态发生变化也相当于数据源发生变化,只要调用notifyDataSetChanged()方法就可以更新列表。


下面是自定义adapter的代码,更新选中的状态在getView方法进行

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. package com.suntek.mobilemeeting.adapter;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. import android.content.Context;  
  7. import android.text.TextUtils;  
  8. import android.view.LayoutInflater;  
  9. import android.view.View;  
  10. import android.view.ViewGroup;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.CheckBox;  
  13. import android.widget.TextView;  
  14.   
  15. import com.suntek.mobilemeeting.R;  
  16. import com.suntek.mobilemeeting.model.Contact;  
  17.   
  18. /** 
  19.  * 本地联系人适配器 
  20.  *  
  21.  * @author wwj 
  22.  *  
  23.  */  
  24. public class LocalContactAdapter extends BaseAdapter {  
  25.   
  26.     private HashMap<Integer, View> lmap = new HashMap<Integer, View>();  
  27.     private ArrayList<Contact> contactList;  
  28.     private Context context;  
  29.     private HashMap<Contact, Boolean> map_NumberSelected = null;  
  30.     private String kind;  
  31.   
  32.     public class ViewHolder {  
  33.         public TextView contactName;  
  34.         public TextView contactMobile;  
  35.         public TextView contactEmail;  
  36.         public CheckBox checkBox;  
  37.     }  
  38.   
  39.     public LocalContactAdapter(Context context, ArrayList<Contact> contactList,  
  40.             String kind) {  
  41.         this.contactList = contactList;  
  42.         this.context = context;  
  43.         map_NumberSelected = new HashMap<Contact, Boolean>();  
  44.         this.kind = kind;  
  45.     }  
  46.   
  47.     @Override  
  48.     public int getCount() {  
  49.         return contactList.size();  
  50.     }  
  51.   
  52.     @Override  
  53.     public Object getItem(int position) {  
  54.         return contactList.get(position);  
  55.     }  
  56.   
  57.     @Override  
  58.     public long getItemId(int position) {  
  59.         return position;  
  60.     }  
  61.   
  62.     @Override  
  63.     public View getView(int position, View convertView, ViewGroup parent) {  
  64.         ViewHolder holder;  
  65.         if (convertView == null) {  
  66.   
  67.             holder = new ViewHolder();  
  68.             LayoutInflater inflater = (LayoutInflater) context  
  69.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  70.             convertView = inflater.inflate(R.layout.local_contact_list_item,  
  71.                     null);  
  72.             holder.contactName = (TextView) convertView  
  73.                     .findViewById(R.id.name_tv);  
  74.             holder.contactMobile = (TextView) convertView  
  75.                     .findViewById(R.id.number_tv);  
  76.             holder.contactEmail = (TextView) convertView  
  77.                     .findViewById(R.id.email_tv);  
  78.             holder.checkBox = (CheckBox) convertView  
  79.                     .findViewById(R.id.local_contact_checkbox);  
  80.             // lmap.put(position, convertView);  
  81.             convertView.setTag(holder);  
  82.         } else {  
  83.             // convertView = lmap.get(position);  
  84.             holder = (ViewHolder) convertView.getTag();  
  85.         }  
  86.   
  87.         Contact contact = contactList.get(position);  
  88.         if (contact.getName() == "" || contact.getName() == null) {  
  89.             String name = "未知";  
  90.             holder.contactName.setText(name);  
  91.         } else {  
  92.             holder.contactName.setText(contact.getName());  
  93.         }  
  94.   
  95.         if (kind != null && kind.equals("email")) {  
  96.             if (!TextUtils.isEmpty(contact.getEmail())) {  
  97.                 holder.contactEmail.setText(contact.getEmail());  
  98.                 holder.contactMobile.setVisibility(View.GONE);  
  99.             }  
  100.         } else if (!TextUtils.isEmpty(contact.getNumber())) {  
  101.             holder.contactMobile.setText(contact.getNumber());  
  102.             holder.contactEmail.setVisibility(View.GONE);  
  103.         } else {  
  104.             holder.contactMobile.setVisibility(View.GONE);  
  105.             holder.contactEmail.setVisibility(View.GONE);  
  106.         }  
  107.         // 显示是否选中状态  
  108.         holder.checkBox.setChecked(map_NumberSelected.get(contact));  
  109.   
  110.         return convertView;  
  111.     }  
  112.   
  113.     public void setContactList(ArrayList<Contact> contactList) {  
  114.         this.contactList = contactList;  
  115.     }  
  116.   
  117.     public void setMap_NumberSelected(  
  118.             HashMap<Contact, Boolean> map_NumberSelected) {  
  119.         this.map_NumberSelected = map_NumberSelected;  
  120.     }  
  121.   
  122. }  



0 0