选中ExpandableListView(Android)中的所有复选框

时间:2011-08-27 14:47:00

标签: java android

我正在使用ExpandableListView。在组和子组中,都有复选框。如何做到以下要求?

当用户选中组的复选框时,请检查其子项的所有框。

我想我需要覆盖BaseExpandableListAdapter, 但我不知道应该填写什么。谢谢。

public View getGroupView(int groupPosition, boolean isExpanded, 
  View convertView, ViewGroup parent) 
{
    CheckBox cb = (CheckBox)v.findViewById(R.id.checkBox1);
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) 
        {
            //Fill in what?
        }

    });

}

有一个类似的问题,但我不明白它的解决方案: How to get all childs view in group with ExpandableListView

2 个答案:

答案 0 :(得分:2)

我相信链接的答案是说你应该跟踪数组列表中已检查组的状态。然后,在您getChildView的{​​{1}}方法中,您会检查孩子的群组是否存在。

这是我的实现,我使用的是hashmap而不是arraylist:

BaseExpandableListAdapter

现在,在您的侦听器中,您可以通过删除并添加到状态对象来管理状态。我使用了public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { CheckBox check__bookmark = (CheckBox) child_row.findViewById(R.id._checkBox); if (mapp.group_bookmark_s_checked.containsKey((groupPosition)) == true) check__bookmark.setChecked(true); else check__bookmark.setChecked(false); } public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { CheckBox PlayGroupSelected = (CheckBox) group_row.findViewById(R.id.bookmark_group_checkBox); if (mapp.group_bookmark_s_checked.containsKey((groupPosition)) == true) PlayGroupSelected.setChecked(true); else PlayGroupSelected.setChecked(false); PlayGroupSelected.setOnCheckedChangeListener( new BookmarkGroupCheckedChangeListener(groupPosition, mapp, group_row)); } ,因为在检查状态更改时,孩子们没有刷新。不确定这是否是解决该问题的正确方法,但它确实可以解决问题。

notifyDataSetChanged()

答案 1 :(得分:1)

这是一个链接:http://prativas.wordpress.com/category/android/expandable-list-view-in-android/ 包含您需要的一切。只需仔细阅读代码即可试用。