2015-06-17 95 views
0

事情是,我有一个ExpandableListView有2个组,每个组内部有一些用户,当我点击这些用户时,我得到他们的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)); 
    } 
} 

型号:

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; 
    } 


} 

回答

1

我想你指的是这一行:

aMap.remove(alunos); 

...这是唯一的地方你在哪里试图从HashMap中删除。

如果是这种情况,问题是您没有将正确的参数值传递给。该方法预计您将通过key值,例如IdEscola,这是您在HashMap中用于执行put的关键值。

但是相反,您传递的是alunos,我不太确定那是什么,但它看起来像一个学生列表。

所以我认为你想要做的只是做aMap.remove(IdEscola)

编辑:我现在意识到你的hashmap是由学校,所以我改变了我的答案。

编辑2:如果上述不是你想要的,那么你可能不想从该HashMap中删除任何东西。

+0

是的,你认为没事,但如何通过alunos我循环? – AND4011002849

+0

@WARpoluido - alunos是GPEscolas对象,你这里没有包括,所以我们怎么可能能够帮助? – pnadczuk

+0

@WARpoluido:我调整了我的答案,现在我明白你的意图了。只要做'aMap.remove(IdEscola)'。我很确定这就是你的意思。 – sstan

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. 

如果你使用一个对象作为重点把一些元素的地图,那么你不能使用对象B进行检索,即使它们在逻辑上是相同的。