package com.example.plugindemo.activity.actionbar; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; import com.example.plugindemo.R; public class ActionModeCheckAdapter extends ArrayAdapter<String> { public interface Callback { public void onAdapterCheckedListener(); public void onAdapterUnCheckedListener(); } private Set<String> mSelected = new HashSet<String>(); private Callback mCallback; private ArrayList<String> mList; private boolean isSelectAll = false; private static class ViewHolder { public CheckBox mCheckBox; public TextView mTextView; } public ActionModeCheckAdapter(Context context, int resource, int textViewResourceId, List<String> objects, Callback callback) { super(context, resource, textViewResourceId, objects); // TODO Auto-generated constructor stub mCallback = callback; mList = (ArrayList<String>) objects; } public boolean hasChecked() { return mSelected.isEmpty(); } public void removeSelected() { if (isSelectAll) { mList.removeAll(mList); } else if (!mSelected.isEmpty()) { for (String string : mSelected) { mList.remove(string); } } mSelected.clear(); notifyDataSetChanged(); } public void selectAll() { isSelectAll = true; notifyDataSetChanged(); mSelected.clear(); } public void unselectAll() { if (isSelectAll) { isSelectAll = false; notifyDataSetChanged(); mSelected.clear(); } } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View view = super.getView(position, convertView, parent); ViewHolder holder = null; Object tag = view.getTag(); if (tag == null) { holder = new ViewHolder(); holder.mCheckBox = (CheckBox) view.findViewById(R.id.check_box); holder.mTextView = (TextView) view.findViewById(R.id.text); view.setTag(holder); } else { holder = (ViewHolder) tag; } holder.mCheckBox.setTag(holder.mTextView.getText()); holder.mCheckBox.setOnCheckedChangeListener(mListener); if (isSelectAll) { holder.mCheckBox.setChecked(true); } else { holder.mCheckBox.setChecked(false); } return view; } private OnCheckedChangeListener mListener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub String text = (String) buttonView.getTag(); if (isChecked) { mSelected.add(text); if (mCallback != null) { mCallback.onAdapterCheckedListener(); } } else { mSelected.remove(text); if (mCallback != null) { mCallback.onAdapterUnCheckedListener(); } if (isSelectAll) { isSelectAll = false; } } } }; }