问题是,我有一个包含2个组的ExpandableListView,在每个组内部我有一些用户,当我点击这些用户时,我得到他们的ID并添加到字符串的HashMap,现在我正在尝试删除这些我第二次点击它们时会显示ID,但第二组的ID不会被删除。这是我正在尝试做的事情:
aMap = new HashMap < String, GPSEscolas > ();
TextView idAluno = (TextView) v.findViewById(R.id.idcrianca);
TextView idEscola = (TextView) v.findViewById(R.id.idescola);
IdEscola = String.valueOf(idEscola.getText());
IdAluno = String.valueOf(idAluno.getText());
mGpsEscolas = aMap.get(IdEscola);
if (mGpsEscolas == null) {
mGpsEscolas = new GPSEscolas();
aMap.put(IdEscola, mGpsEscolas);
mGpsEscolas.getIds_alunos().add(String.valueOf(IdAluno));
mGpsEscolas.setAlunos(IdAluno);
} else {
Set < String > ia = mGpsEscolas.getIds_alunos();
if (!ia.contains(IdAluno)) {
ia.add(String.valueOf(IdAluno));
} else {
alunos = aMap.get(IdEscola).getAlunos();
ia.remove(IdAluno);
aMap.remove(alunos);
}
stringArray = new String[ia.size()];
out = "";
if (ia.size() > 0) {
for (String str: ia.toArray(stringArray)) {
out += ";" + str;
}
aMap.get(IdEscola).setAlunos(out.substring(1));
}
}
MOdel:
public class GPSEscolas implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id_escola;
private Set<String> ids_alunos = new TreeSet<String>();
private String Alunos;
private double distancia;
private Float latitude;
private Float longitude;
public String getAlunos() {
return Alunos;
}
public void setAlunos(String alunos) {
Alunos = alunos;
}
public Integer getId_escola() {
return id_escola;
}
public void setId_escola(Integer id_escola) {
this.id_escola = id_escola;
}
public Set<String> getIds_alunos() {
return ids_alunos;
}
public void setIds_alunos(Set<String> ids_alunos) {
this.ids_alunos = ids_alunos;
}
public double getDistancia() {
return distancia;
}
public void setDistancia(double distancia) {
this.distancia = distancia;
}
public Float getLatitude() {
return latitude;
}
public void setLatitude(Float latitude) {
this.latitude = latitude;
}
public Float getLongitude() {
return longitude;
}
public void setLongitude(Float longitude) {
this.longitude = longitude;
}
}
答案 0 :(得分:1)
我假设您指的是这一行:
document.getElementById("divID").textContent
...这是您尝试从aMap.remove(alunos);
中删除的唯一地方。
如果是这种情况,则问题是您没有将正确的参数值传递给HashMap
。该方法希望您传递aMap.remove()
值,例如key
所用的值,这是您在IdEscola
中执行put
时使用的关键值。
但相反,你正在传递HashMap
,我无法确定这是什么,但它看起来像是学生名单。
所以我认为你想要做的只是做alunos
。
编辑:我现在意识到你的哈希地图是由学校键入的,所以我改变了我的答案。
编辑2:如果上述内容不符合您的要求,那么您可能不想从该HashMap中删除任何内容。
答案 1 :(得分:0)
如果您的关键对象不同,而放置(aMap.put(IdEscola,mGpsEscolas))和获取(aMap.get(IdEscola) ).getAlunos())是两个不同的对象,然后hashmap将返回null,即使它们在逻辑上是相同的值。
在java中读取对象类,它是equals()和hashcode()函数,hashmap类使用它。
Student A= new Student ("ram");
Student B= new Student ("ram");
map.put(A,"10");
map.get(B) will return null.
如果使用对象A作为键将一些元素放入地图中,那么即使它们在逻辑上相同,也无法使用对象B来检索它。