折叠然后使用Checkbox扩展ExpandableListView会反转检查子元素的顺序

时间:2018-06-16 22:33:00

标签: android checkbox expandablelistview android-checkbox expandablelistadapter

我有一个Activity,其中有一个ExpandableListView,它有TextView组元素和CheckBox子元素。我遇到的问题是,让我说我扩展了组1.组1有5个子CheckBox元素,我检查了第一个元素。如果我然后折叠组1然后再次展开它,现在检查CheckBoxes列表中的最后一个元素,而第一个元素不是。我已经看到很多关于这个的其他帖子,但它们都没有结果,并且与这个问题不一样,因为重新检查Boxes似乎不是随机的,它似乎是倒置的。再举一个例子,如果我检查了第二个元素,折叠然后再次展开,那么现在将检查倒数第二个元素,依此类推。为什么会这样?我唯一能想到的是,当适配器扩展列表并为每个复选框子元素设置选中的值时,它会以相反的顺序执行。我已经尝试了很多解决方案(例如在折叠时手动保存List中的每个值<>然后在扩展后设置它们),但没有一个有效,我无法解决问题(我是Android开发的新手)。任何帮助是极大的赞赏。我将包含我必须创建的ExpandableListAdapter类的代码以及我的MainActivity的代码。

  

public class MyListAdapter扩展了BaseExpandableListAdapter {

Context context;
List<String> parents;
Map<String, List<String>> children;

public MyListAdapter(Context context, List<String> parents, Map<String, List<String>> children) {
    this.context = context;
    this.parents = parents;
    this.children = children;
}


@Override
public int getGroupCount() {
    return parents.size();
}

@Override
public int getChildrenCount(int i) {
    return children.get(parents.get(i)).size();
}

@Override
public Object getGroup(int i) {
    return parents.get(i);
}

@Override
public Object getChild(int i, int i1) {
    Log.d("Parent, Child", i + " " + i1);
    return children.get(parents.get(i)).get(i1);
}

@Override
public long getGroupId(int i) {
    return i;
}

@Override
public long getChildId(int i, int i1) {
    return i1;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
    String title = (String) getGroup(i);

    if (view == null){
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = layoutInflater.inflate(R.layout.list_parent,null);
    }
    TextView chkParent = (TextView) view.findViewById(R.id.txtParent);
    chkParent.setText(title);
    return view;
}

@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
   String child = (String) getChild(i,i1);

   if (view == null){
       LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       view = layoutInflater.inflate(R.layout.list_child,null);
   }
   CheckBox chkChild = (CheckBox) view.findViewById(R.id.chkChild);
   chkChild.setText(child);
   ;

    return view;
}

@Override
public boolean isChildSelectable(int i, int i1) {
    return true;
}

}

和MainAcitivty:

String[] array = getResources().getStringArray(R.array.Program);
    fillData(array);
    expListView = (ExpandableListView) findViewById(R.id.list_Parent);
    final ExpandableListAdapter listAdapter = new MyListAdapter(this, parents, map);
    expListView.setAdapter(listAdapter);

0 个答案:

没有答案