我正在使用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
答案 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/ 包含您需要的一切。只需仔细阅读代码即可试用。