2015-12-09 2 views
1

Я хочу снять все флажки в дочернем элементе расширяемого списка, но проблема в том, что он снимает флажки только видимых флажков в группе просмотра. Невидимые флажки не очищаются. Пожалуйста, помогите мне.Как снять отметку со всех флажков в расширяемом списке?

public void uncheckAllChildrenCascade(ViewGroup vg) { 
    for (int i = 0; i < vg.getChildCount(); i++) { 
     View v = vg.getChildAt(i); 
     if (v instanceof CheckBox) { 
      ((CheckBox) v).setChecked(false); 
     } else if (v instanceof ViewGroup) { 
      uncheckAllChildrenCascade((ViewGroup) v); 
     } 
    } 
} 

ответ

0

Хранить Флажки в ArrayList:

final ArrayList<CheckBox> myCheckBoxes = new ArrayList<>(); 
    final CheckBox checkBox = new CheckBox(this); 
    checkBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (checkBox.isSelected()){ 
       myCheckBoxes.remove(checkBox); 
      }else{ 
       myCheckBoxes.add(checkBox); 
      } 
     } 
    }); 

, а затем установить Проверил ложь:

for (int i = 0; i < myCheckBoxes.size(); i++) { 
     myCheckBoxes.get(i).setSelected(false); 
    } 

Готово у вас есть все CheckBoxes бесконтрольно :)

+0

на самом деле у меня есть кнопка Clear в нижний колонтитул расширяемого списка в основной деятельности .. Когда я нажимаю на кнопку, этот метод отменяет выбор метода AllChildrenCascade(), и я передаю расширяемое listview в нем. –

+0

метод находится в классе адаптера –

+0

@ Фабио может у меня помочь мне .. . –

0

Вы только снимите флажки с видимых флажков, потому что вы используете ViewHolder. У вас нет списка или сотен для хранения ваших данных? Измените свой список и позвоните notifyDataSetChanged().

+0

у меня есть Карта Hash для хранения отмеченных флажков –

0
  1. Сохраните флажок ArrayList для родителей.
  2. Добавить родительский флажок для родителя в getGroupView.
  3. установить значение ArrayList для позиции true, если оно отмечено, иначе установите значение false.
  4. теперь вызывайте notifydatasetchanged внутри этого checkbox слушателя, который находится внутри getGroupView.
  5. внутри getChildView, если ArrayList имеет true в текущей группеPosition, а затем установите флажок child, а затем снимите флажок. Надеюсь, это то, что вам нужно.

    @Override 
    public View getGroupView(final int groupPosition, boolean isExpanded,View convertView, final ViewGroup parent) { 
        if (convertView == null) { 
        LayoutInflater infalInflater = (LayoutInflater)this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        convertView = infalInflater.inflate(R.layout.row_list_header,null); 
    } 
    CheckBox chkGroup = (CheckBox) convertView.findViewById(R.id.chkGroup); 
    chkGroup.setOnClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         CheckBox cb = (CheckBox) v.findViewById(R.id.chkGroup); 
         if (cb.isChecked()) { 
          privateGroupChecked.set(groupPosition, true); 
         else { 
          privateGroupChecked.set(groupPosition, false); 
         } 
         notifyDataSetChanged(); 
         } 
        }); 
        return convertView; 
    } 
    
    @Override 
    public View getChildView(final int groupPosition,final int childPosition, boolean isLastChild, View convertView,ViewGroup parent) {if (convertView == null) { 
        LayoutInflater infalInflater = (LayoutInflater)this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        convertView = infalInflater.inflate(R.layout.row_list_child, null); 
        } 
        boolean isGroupChecked = privateGroupChecked.get(groupPosition); 
        if (isGroupChecked) { 
        chkDevice.setChecked(isGroupChecked); 
        } 
        else 
        { 
         chkDevice.setChecked(!isGroupChecked); 
        } 
        return convertView; 
        } 
    
+0

Что такое privateGroupChecked? – Sunil

0
private final Set<Pair<Long, Long>> mCheckedItems = new HashSet<Pair<Long, Long>>(); 
final CheckBox cb = (CheckBox) convertView.findViewById(R.id.cb_checkbox); 
    RelativeLayout relativelayout=(RelativeLayout) convertView.findViewById(R.id.rl_selected); 
    txtListChild.setText(childText); 
    final Pair<Long, Long> tag = new Pair<Long, Long>(getGroupId(groupPosition), getChildId(groupPosition, childPosition)); 
    cb.setTag(tag); 
     cb.setChecked(mCheckedItems.contains(tag)); 
relativelayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (cb.isChecked()) { 
       cb.setChecked(false); 
       mCheckedItems.remove(tag); 
       Shop.iv_shopbyCategory.setVisibility(View.GONE); 
       Shop.tv_rl_selectedshopByCategory.setText(" "); 
      } 
      else 
       { 
        mCheckedItems.clear(); 
        cb.setChecked(true); 
        mCheckedItems.add(tag); 
        final String SelectedGrouposition=(String) getGroup(groupPosition); 
        final String SelectedChildposition=(String) getChild(groupPosition, childPosition); 

        listAdapter.notifyDataSetChanged(); 
      } 
     } 
    }); 

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

для меня его работы и надеемся, что она будет работать для и также ...

Попробуйте

Смежные вопросы