目前我可以通过 groupPosition 和 childPosition 选中/取消选中复选框,并且工作正常。我将 groupPosition 和 childPosition 保存到 SQLite 数据库。
当我添加删除选项时,我的复选框选中状态为关闭/困惑。
例如,我有以下内容:
第 1 组,
child 1、 child 2、 child 3
我检查了所有 3 个并将检查的位置保存到 SQLite 数据库。 选中的位置将是数据库中的 0,0 和 0,1 和 0,2。
我删除Child1后,
Child2 成为位置 0,Child3 成为位置 1,这会弄乱选中的状态。
我正在尝试找到一种方法来将组名称和子名称而不是位置保存到 SQLite 数据库中,然后在 Oncrete 方法中加载这些名称。
主要 Activity :
if(category_array.get(groupPosition).subcategory_array.get(childPosition).selected) {
category_array.get(groupPosition).subcategory_array.get(childPosition).selected = false;
try{
MySQLITE_DATABASE.deleteRows(groupPosition, childPosition);
}
catch (Exception e) {}
}
else
{
category_array.get(groupPosition).subcategory_array.get(childPosition).selected = true;
MySQLITE_DATABASE.addRow(groupPosition, childPosition);
}
适配器代码:
private List<Category> mGroupCollection;
if(mGroupCollection.get(groupPosition).subcategory_array.get(childPosition).selected) {
childHolder.checkBox.setBackgroundResource(R.drawable.checkbox_checked);
} else {
childHolder.checkBox.setBackgroundResource(R.drawable.checkbox_unchecked);
}
日期持有人类:
public class Category {
public String category_name = null;
public String cat_SelectedChildCount_name;
public ArrayList<SubCategory> subcategory_array = new ArrayList<SubCategory>();
}
//==============================
public class SubCategory {
public String subcategory_name = null;
public boolean selected = false;
}
我想将组名和子名而不是位置保存到 SQLite 数据库,然后在 OnCreate 方法中加载它们。
我已经试过了,但是没有用:
String Group_Name = category_array.get(Integer.parseInt(groupPosition)).category_name;
String Child_Name = category_array.get(Integer.parseInt(groupPosition)).
subcategory_array.get(Integer.parseInt(childPosition)).subcategory_name;
if(category_array.get(Group_Name).subcategory_array.get(Child_Name).selected) {
category_array.get(Group_Name).subcategory_array.get(Child_Name).selected = false;
MySQLITE_DATABASE.DeleteRow(Group_Name, Child_Name);
}
else {
category_array.get(Group_Name).subcategory_array.get(Child_Name).selected = true;
MySQLITE_DATABASE.AddRow(Group_Name, Child_Name);
}
我知道我需要更改适配器、数据持有者类和 mainactivity 中的代码才能使其正常工作,但我没有主意。想来想去,还是没有什么效果……
有人可以指导我吗?
抱歉代码太长了。
谢谢,谢谢。
最佳答案
如果适合您的要求,请尝试以下任一方法。
如果你想严格使用位置(可能没有唯一的选项)
- 保持数据库设计
| id | parent_position | child_position |
假设您有 N 个 child 。如果你删除一个 child (假设它是 0)。这样做
- 用 (child_position = child_position - 1) 更新所有位置大于 父项的已删除子项。所以立场不变。
如果有删除选项,我个人建议不要使用 position
。我找到的选项,但不知道您的用例
- 如果您从数据库中加载列表,请使用数据库
primarykey
作为 key ,以便在选择/取消选择时将其保存在SQLite 数据库
中。在这种情况下,您也不想知道 parent 的职位。
关于android - 如何保持 ExpandableListView 复选框的选中状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26183396/