#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();