我有一个充满API数据的数组,我有一个expandablelistview来显示该数组的项目,现在我要做的是当用户点击一个项目时它保存该项目的ID到一个数组,所以如果用户在我的数组中选择2个我想要2个Ids的项目,现在发生的是:无论我是否只选择其中一个项目,它将所有项目保存在我的数组中。
Note:
AlertRest:
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
答案 0 :(得分:2)
您正在使用mArrayList
变量来初始化适配器并同时填充myIdList
。当然myIdList
将包含适配器的完整列表。
<强>更新强>
最好将myIdList
定义为MainActivity
类的字段,并在onCreateView
方法中对其进行初始化。
点击不只是添加值 - 你应该检查这个值是否已经在列表中:
if(myIdList.contains(Idalunos)) {
myIdList.remove(Idalunos);
} else {
myIdList.add(Idalunos);
}
答案 1 :(得分:2)
由于嵌套循环和运行任务很少,代码很难遵循。 无论如何,我怀疑下面的代码导致你的应用程序保存列表中的所有(未选中的)项目:
for (int i = 0; i < mArrayList.get(groupPosition).getalunos().size(); i++) {
Integer Idalunos = mArrayList.get(groupPosition).getalunos().get(i).getId_aluno();
myIdList.add(Idalunos);
}
注意:遍历整个列表是一个嫌疑人。它应该选择列表中的某个项目。
所以...另一组相关代码可以帮助我们确定代码修复。我不确定这里是否还有错误。
parent.setItemChecked(index, true);
parent.setSelectedChild(groupPosition, childPosition, true);
parent.getChildAt(index);
注意:这些代码可能没问题。我认为关键代码是索引。我对ExpandableListView不太熟悉。
最后,建议修补代码:
Integer Idalunos = mArrayList.get(groupPosition).getalunos().get(index).getId_aluno();
...
myIdList.add(Idalunos);
请注意,变量 index 用于获取正确的项目Idalunos。