Как выбрать / отменить выбор всего checkBox? - PullRequest
3 голосов
/ 20 июля 2011

У меня есть адаптер с изображением, textView и флажок, а также кнопка «Выбрать все» для выбора всех флажков. Я много искал о том, как я могу сделать это (выбрать все флажки), но это не сработало. Кто-нибудь может объяснить больше, что мне делать? Пожалуйста ... Я должен сделать это срочно

Вот мой адаптер:

Public class LazyAdapter1 extends BaseAdapter {

        private Activity activity;
        private String[] data;
        private String[] nume;
        private LayoutInflater inflater=null;
        public ImageLoader imageLoader; 

        public LazyAdapter1(Activity a, String[] d, String[] f) {
            activity = a;
            data=d;
            nume=f;
            inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            imageLoader=new ImageLoader(activity.getApplicationContext());
        }

        public int getCount() {
            return data.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public class ViewHolder{
            public TextView text;
            public ImageView image;
            public CheckBox ck;
        }



        public View getView(int position, View convertView, ViewGroup parent) {
            View vi=convertView;
            ViewHolder holder;
            if(convertView==null){
                vi = inflater.inflate(R.layout.item, null);
                holder=new ViewHolder();
                holder.text=(TextView)vi.findViewById(R.id.text);;
                holder.image=(ImageView)vi.findViewById(R.id.image);
                holder.ck=(CheckBox)vi.findViewById(R.id.chkbox);
                vi.setTag(holder);
            }
            else
                holder=(ViewHolder)vi.getTag();

            holder.text.setText(nume[position]);
            holder.image.setTag(data[position]);
            imageLoader.DisplayImage(data[position], activity, holder.image);
            return vi;
        }
    }

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 20 июля 2011
boolean flag = true;

Теперь нажмите кнопку, поменяйте местами значение флага

flag = !flag;
adapter.notifydatasetchanged();

Теперь в вашем методе getView

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    ViewHolder holder;
    if (convertView == null) {
        vi = inflater.inflate(R.layout.item, null);
        holder = new ViewHolder();
        holder.text = (TextView) vi.findViewById(R.id.text);
        holder.image = (ImageView) vi.findViewById(R.id.image);
        holder.ck = (CheckBox) vi.findViewById(R.id.chkbox);
        vi.setTag(holder);
    } else {
        holder = (ViewHolder) vi.getTag();
    }
    holder.ck.setChecked(flag);
    holder.text.setText(nume[position]);
    holder.image.setTag(data[position]);
    imageLoader.DisplayImage(data[position], activity, holder.image);
    return vi;
}
1 голос
/ 20 июля 2011

Это получит все представления в вашем просмотре списка, установит флажки в каждом представлении и установит их для проверки:

List<View> listOfViews = new ArrayList<View>();
listView1.reclaimViews(listOfViews);
for (View v : listOfViews)
{
    CheckBox cb = (CheckBox)v.findViewById(R.id.checkbox);
    cb.setChecked(true);
}

UPDATE:

Перед инициализацией адаптера создайте массив списков, содержащий контрольные состояния всех флажков. Затем передайте этот массив в качестве аргумента вашему пользовательскому адаптеру и используйте его в функции getView () (checkStates - это массив в приведенном ниже коде):

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ViewHolder holder;
        if(convertView==null){
            vi = inflater.inflate(R.layout.item, null);
            holder=new ViewHolder();
            holder.text=(TextView)vi.findViewById(R.id.text);;
            holder.image=(ImageView)vi.findViewById(R.id.image);
            CheckBox checkbox = (CheckBox)vi.findViewById(R.id.chkbox);
            checkbox.setChecked(checkStates.get(position);
            holder.ck= checkbox;
            vi.setTag(holder);
        }
        else
            holder=(ViewHolder)vi.getTag();

        holder.text.setText(nume[position]);
        holder.image.setTag(data[position]);
        holder.ck.setChecked(checkStates.get(position));
        imageLoader.DisplayImage(data[position], activity, holder.image);
        return vi;
    }

Затем, когда вы хотите проверить все флажки, установите все значения в массиве, содержащем контрольные состояния флажков, как true. Затем позвоните listView1.setAdapter(adapter);

0 голосов
/ 30 мая 2017

Я присвоил идентификатор каждому выбранному элементу, а затем использовал HashMap для отслеживания выбранных элементов

...