Как выбрать все строки списка, содержащие флажки с флажком «Выбрать все» - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь выбрать все checkboxes из моих listview с помощью другого SELECT ALL checkbox. Я немного искал, но ничего из этого не работает. Текущий SELECT ALL chcekbox проверяет только последнюю строку listview, мне нужно проверить все строки внутри listview.

Вот мой метод getview

    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
        View mView = convertView;
        String betid = mData.get(i).get("id");
        ViewHolder holder ;
        if (mView == null) {
            Context context = viewGroup.getContext();
            LayoutInflater inflater = LayoutInflater.from(context);
            mView = inflater.inflate(R.layout.row_layout, null,false);
            holder = new ViewHolder();
            holder.tx_number = (TextView) mView.findViewById(R.id.tx_number);
            holder.tx_amount = (TextView) mView.findViewById(R.id.tx_amount);
            holder.checkBox = (CheckBox) mView.findViewById(R.id.checkmark);
            selectAll = findViewById(R.id.selectAll);
            holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @RequiresApi(api = Build.VERSION_CODES.N)
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (buttonView.isChecked()) {
                        checked.add((Integer) holder.checkBox.getTag());
                        holder.tx_amount.setBackgroundColor(getResources().getColor(R.color.bluelim));
                        holder.tx_number.setBackgroundColor(getResources().getColor(R.color.bluelim));
                    }
                    else {
                        holder.tx_amount.setBackgroundColor(Color.WHITE);
                        holder.tx_number.setBackgroundColor(Color.WHITE);
                        checked.remove((Integer) holder.checkBox.getTag());
                    }
                }
            });
            holder.checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
            selectAll.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    for ( int i=0; i < listView.getChildCount(); i++) {
                        holder.checkBox.setChecked(true);
                    }
                }
            });
                mView.setTag(holder);
                holder.checkBox.setTag(i);
        } else {
            holder = (ViewHolder) mView.getTag();
            ((ViewHolder)mView.getTag()).checkBox.setTag(i);
        }
        if (betid != null) {
            String betnumber = mData.get(i).get("betnumber");
            String amountTarget = mData.get(i).get("betamount");
            holder.tx_amount.setText(amountTarget);
            holder.tx_number.setText(betnumber);
        }
        ViewHolder holde2r = (ViewHolder) mView.getTag();
        for (int k = 0; k < checked.size(); k++) {
            if (checked.get(k) == i) {
                holde2r.checkBox.setChecked(true);
            }
            else if (checked.get(k) != i) {
                holde2r.checkBox.setChecked(false);
            }
        }
        return mView;
    }

1 Ответ

1 голос
/ 20 июня 2019

Шаг 1:

В ваш pojo класс добавьте boolean isSelected; (изначально это ложное значение)

Шаг 2:

В onBindViewHolder() -> if(isSelected) -> установите флажок true на свой флажок

Шаг 3:

После нажатия выберите все ->итерируйте свой массив ( mData ) и измените на

isSelected = true

и позвоните notifyDataSetChanged()

...