3

У меня есть расширяемый вид списка с дочерними флажками. Флажок установлен в файле child_helper xml с идентификатором «check1». По некоторым причинам кажется, что несколько флажков связаны друг с другом, а не независимы друг от друга. Например, если в первой группе я выбираю первый элемент, он выбирает каждый третий элемент в этой группе, а все остальные группы выбирают второй элемент, пропускают два и выбирают следующий элемент.Расширяемый просмотр списка флажок проверяет несколько ящиков

Если я выбираю первые три элемента в группе 1, тогда он выбирает все элементы во всех группах. Как-то я создал 3 группы флажков вместо отдельного флажка для каждого ребенка. Я рассматривал множество обучающих программ, которые предполагают, что проблема устранена с помощью адаптера. Я использую пользовательский адаптер, однако я не уверен, как использовать все его функции.

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

Благодаря

Это код для моего слушателя:

expListView.setOnChildClickListener(new OnChildClickListener() { 
@Override 
public boolean onChildClick(ExpandableListView parent, View v, 
    int groupPosition, int childPosition, long id) { 
    Log.d("Enter_Foods", "onChildClick: "+childPosition); 
    CheckBox cb = (CheckBox)v.findViewById(R.id.check1); 
    if(cb != null) 
     cb.toggle(); 
       return false; 

      } 
     }); 

    } 

Я думаю, что проблема заключается в одном из перекрытых методов в моем адаптере.

ExpandableListAdapter foodCategoryExpand = new ExpandableListAdapter() { 

@Override 
Allitemsenabled() 

other override methods... 


public Object getChild(int groupPosition, int childPosition) { 
    switch (groupPosition) { 
    case 0: 
    return group1.get(childPosition); 
    case 1: 
    return group2.get(childPosition); 
    case 2: 
    return group3.get(childPosition); 
    default: 
    return null; 
    } 
} 

public View getChildView(int groupPosition, int childPosition, boolean isLastChild,   View convertView, ViewGroup parent) { 
     ChildHolder holder; 
     if (convertView == null) { 
     holder = new ChildHolder(); 
     LayoutInflater inflator = LayoutInflater.from(Enter_Foods.this); 
     convertView = inflator.inflate(R.layout.enter_foods_child_helper,null); 
     holder.tvChild = (TextView) convertView.findViewById(R.id.enter_foods_exp_lay_child); 
     convertView.setTag(holder); 
     } else { 
     holder = (ChildHolder) convertView.getTag(); 
     } 

     //switch based on which group (main heading) child is in 
     switch (groupPosition) { 
     case 0: 
     holder.tvChild.setText(group1.get(childPosition)); 
     break; 
     case 1: 
     holder.tvChild.setText(group2.get(childPosition)); 
     break; 
     case 2: 
     holder.tvChild.setText(group3.get(childPosition)); 
     break; 
     } 
     return convertView; 
} 

//create Group (main heading) view 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     GroupHolder holder; 

     if (convertView == null) { 
     holder = new GroupHolder(); 
     LayoutInflater inflator = LayoutInflater.from(Enter_Foods.this); 
     //inflate xml file and then get view from that file 
     convertView = inflator.inflate(R.layout.enter_foods_group_helper,null); 
     holder.tvGroup = (TextView) convertView.findViewById(R.id.enter_foods_exp_lay_group); 
     convertView.setTag(holder); 

     } else { 
     holder = (GroupHolder) convertView.getTag(); 
     } 
     //this actually gets the text we set in onCreate and sets it to the textView (holder) 
     holder.tvGroup.setText(groupTitle.get(groupPosition)); 
     return convertView; 

} 

other override methods 
+0

Прошу прощения, я не могу понять, какие вещи вы создали, но я вполне уверен, что это имеет какое-то отношение к переработке списка. Он неоднократно проверяет элементы списка, потому что он перерабатывает эти представления. Для каждого Просмотра вы надуваете getView(), убедитесь, что вы проверяете/снимаете флажок на основе некоторого массива, который вы храните. – Kgrover

+1

Что вы подразумеваете под тегом? Я попытаюсь объединиться со списком, я предполагаю, что вы говорите о getChildView? – farnett

ответ

0

Для решения этой проблемы.

Прежде всего создать

ArrayList<String> isCheckedStatus = new ArrayList<String>(); 
CheckBox check_document; 

Во время заполнения представления списка заполнить этот ArrayList с умолчанию «ложный»

for (int i = 0; i < YOUR LIST ITEM ARRAY.size(); i++) { 
         isCheckedStatus.add("false"); 
        } 

Теперь во время CheckBox мыши в методе getChildView

@Override 
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {if (isCheckedStatus.size() > 0) { 
check_document = (CheckBox) convertView.findViewById(R.id.summary_chk); 
       if (isCheckedStatus.get(childPosition).equalsIgnoreCase("false")) { 
        ((CheckBox) convertView.findViewById(R.id.summary_chk)).setChecked(false); 
       } else if (isCheckedStatus.get(childPosition).equalsIgnoreCase("true")) { 
        ((CheckBox) convertView.findViewById(R.id.summary_chk)).setChecked(true); 
       } 

check_document.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        System.out.println("AAAA size" + isCheckedStatus.size()); 
        if (((CheckBox) v).isChecked()) { 
         if (isCheckedStatus.size() > 0) { 
          isCheckedStatus.remove(childPosition); 
          isCheckedStatus.add(childPosition, "true"); 

         } 
        } else { 
         if (isCheckedStatus.size() > 0) { 
          isCheckedStatus.remove(childPosition); 
          isCheckedStatus.add(childPosition, "false"); 
         } 

        } 
       } 
      }); 
      } 

Это изменит статус флажка каждый раз, когда getchildview me тод называется. И также устраните проблему с несколькими вариантами выбора флажка.

Надеюсь, что эта работа. Он работает для меня ...

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