解说一下,这个是个收放的,其次当你选中后再合起来再打开他原来选的还是被默认选中的(这个代码中的处理),希望大家路过的能好好学一下思路,还是很不错的, Log.i("archermind", "---------------------" + s);这句是打印出你所有选中的值。。。
package com.android.archermind.activity; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import android.app.ExpandableListActivity; import android.database.Cursor; import android.graphics.Color; import android.os.Bundle; import android.provider.ContactsContract; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.View.OnClickListener; import android.widget.BaseExpandableListAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ExpandableListAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.CompoundButton.OnCheckedChangeListener; public class EmailAdressSelect extends ExpandableListActivity { private static final String NAME = "NAME"; private static final String IS_EVEN = "IS_EVEN"; private String[] groups; private String[][] children = {}; private ExpandableListAdapter mAdapter; private Button selectButton; private View view; private CheckBox cb; private HashSet<String> all; private boolean shoufang = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.email_address_select_view); mAdapter = new MyExpandableListAdapter(); this.getExpandableListView().setGroupIndicator(null); HashMap hm = (HashMap<String, List<String>>) getContactHaveEmail(); Set<String> hs = (Set<String>) hm.keySet(); String[] str = new String[hs.size()]; groups = (String[]) hs.toArray(str); ArrayList<String[]> al = new ArrayList<String[]>(); Collection values = hm.values(); for (Iterator iterator = values.iterator(); iterator.hasNext();) { ArrayList value = (ArrayList) iterator.next(); String[] als = new String[value.size()]; String[] alss = (String[]) value.toArray(als); al.add(alss); } String[][] child = new String[al.size()][]; children = (String[][]) al.toArray(child); setListAdapter(mAdapter); registerForContextMenu(getExpandableListView()); all = new HashSet<String>(); selectButton = (Button) findViewById(R.id.selcect_button); selectButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { for (String s : all) { Log.i("archermind", "---------------------" + s); } } }); } public class MyExpandableListAdapter extends BaseExpandableListAdapter { private ImageView iv; public void onGroupCollapsed(int groupPosition) { } public void onGroupExpanded(int groupPosition) { shoufang = true; } public Object getChild(int groupPosition, int childPosition) { return children[groupPosition][childPosition]; } public long getChildId(int groupPosition, int childPosition) { return childPosition; } public int getChildrenCount(int groupPosition) { return children[groupPosition].length; } public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { /* if(convertView != null) { return convertView;//这个会乱的 }*/ view = getLayoutInflater().inflate( R.layout.email_address_select_content, null); cb = (CheckBox) view.findViewById(R.id.check); cb.setText(getChild(groupPosition, childPosition).toString()); cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { all.add(buttonView.getText().toString()); } else { all.remove(buttonView.getText().toString()); } } }); if(shoufang) { for(String str : all) { if(cb.getText().toString().equals(str)) { cb.setChecked(true); } } } return view; } public Object getGroup(int groupPosition) { return groups[groupPosition]; } public int getGroupCount() { return groups.length; } public long getGroupId(int groupPosition) { return groupPosition; } public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View view = getLayoutInflater().inflate( R.layout.email_address_select_title, null); TextView tv = (TextView) view.findViewById(R.id.text); tv.setText(getGroup(groupPosition).toString()); iv = (ImageView) view.findViewById(R.id.icon); iv.setBackgroundResource(R.drawable.linkman_no_selected); return view; } public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public boolean hasStableIds() { return true; } } public HashMap<String, List<String>> getContactHaveEmail() { HashMap<String, List<String>> emailsMap = new HashMap<String, List<String>>(); Cursor c = getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { // 遍历所有联系人 int iName = c .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); String nameStr = c.getString(iName); Log.i("archermind", "--------DISPLAY_NAME:---------" + nameStr); int iId = c.getColumnIndex(ContactsContract.Contacts._ID); String stringID = c.getString(iId); Log.i("archermind", "--------iId:---------" + stringID); Cursor emails = getContentResolver().query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + stringID, null, null);// 通过ID查询对应联系人email List<String> contactsHaveEmail = new ArrayList<String>(); if (0 != emails.getCount()) { while (emails.moveToNext())// email可能有好几个 { String emailAddress = emails .getString(emails .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); Log.i("archermind", "--------emailAddress:---------" + emailAddress); contactsHaveEmail.add(emailAddress); } emailsMap.put(nameStr, contactsHaveEmail); } } return emailsMap; } } |