Как использовать select all checkboxes с помощью expandedlistview?

#java #android #android-checkbox #selectall

#java #Android #android-флажок #выберите все

Вопрос:

Это мой код для установки дочернего представления. Я установил, что первым дочерним элементом является макет «Выбрать все», затем макет для дочернего элемента для остальных. Когда я нажимаю выбрать все флажки, ничего не происходит.

 public View getChildView(int groupPosition, final int childPosition,
                                 boolean isLastChild, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            ArrayList<CheckBox> myCheckBoxes = new ArrayList<>();

            if(childPosition == 0){
                convertView = inflater.inflate(R.layout.child_header, null);
                chkBoxselectAll = convertView.findViewById(R.id.chk_select_all);

            } else {
                convertView = inflater.inflate(R.layout.child_row, null);
                chkBoxsurvey = convertView.findViewById(R.id.chk_survey);
                for (int i = 0; i < parent.getChildCount(); i  ) {
                    View v = parent.getChildAt(i);
                        if(v.getId() == (R.id.chk_survey))
                            myCheckBoxes.add((CheckBox)v.findViewById(R.id.chk_survey));
                }
            }
 if (childPosition > 0 amp;amp; childPosition < getChildrenCount(groupPosition) - 1) {

            chkBoxselectAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

                    for (int i = 0; i < myCheckBoxes.size(); i  ) {
                        if(isChecked)
                            myCheckBoxes.get(i).setChecked(true);
                        else
                            myCheckBoxes.get(i).setChecked(false);
                    }
    }
            return convertView;
        }
  

Ответ №1:

Я не вижу никакого оператора, который уведомляет ваш список, поэтому вам нужно добавить строку для этого.

смотрите приведенный ниже код, я добавил notifyDataSetChanged вне бокового цикла

   for (int i = 0; i < myCheckBoxes.size(); i  ) {
     if(isChecked)
        myCheckBoxes.get(i).setChecked(true);
     else
        myCheckBoxes.get(i).setChecked(false);
   }
   notifyDataSetChanged();