具有多项选择的ExpandableListView将所选项目保存到数组中

时间:2015-05-14 14:27:33

标签: android arrays multidimensional-array android-listview expandablelistview

我有一个充满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">

2 个答案:

答案 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。