Autore Topic: Eliminazione Group da ExpandableListView  (Letto 250 volte)

Offline Peppin2o

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 8.1 Pro x64
Eliminazione Group da ExpandableListView
« il: 17 Settembre 2015, 19:03:21 CEST »
0
Salve a tutti!

Ho una ExpandableListView (custom, ovviamente) che fa un pò i capricci quando si elimina l'ultimo "child" di un qualsiasi "group" (escludendo l'ultimo group).
Ecco i fatti: ho la possibilità di eliminare i child dopo la conferma ottenuta tramite AlertDialog. Se ne elimino uno qualsiasi, va tutto bene. Se, al contrario, elimino l'ultimo child disponibile per un dato group (escludendo l'ultimo), all'aggiornamento della grafica ottengo gli elementi dell'ultimo group duplicati. Specifico che la duplicazione avviene solo ed esclusivamente sull'ultimo group.
Dopo accurato debug, ho riscontrato che i dati all'interno dell'adapter sono esatti (alla fine dell'elaborazione), perciò il problema dovrebbe ridursi al cattivo refresh della lista (solo sull'ultimo group, ecchesfiga!). In ogni caso sembra che collassando e riespandendo quell'ultimo group, la lista torni ad essere "normale" (cioè senza duplicati).

Ecco a voi il codice incriminato:

Activity principale
Codice (Java): [Seleziona]
          expanse_lv = (ExpandableListView) findViewById(R.id.lv_riepilogo);
          adapter_expanded = (MyExpandableListAdapter)expanse_lv.getExpandableListAdapter();
          adapter_expanded.deleteChild(dp);
          //ciclo for con operazioni tra le quali adapter_expanded.modifyChild(prev, post);
        adapter_expanded.notifyDataSetChanged();
        adapter_expanded.notifyDataSetInvalidated();

MyExpandableListAdapter
Codice (Java): [Seleziona]
    public void deleteChild(DatiProdotto p){
        Categoria cat = new Categoria(p.getCategoria(), p.getNomeCategoria(), p.getTagCat());
        int groupId = -1;
        if (categoriaPresente(cat, getCategorie())) {
            for (int i = 0; i < groups.size(); i++) {
                if (groups.get(i).c.equals(cat)) {
                    for (DatiProdotto dp: groups.get(i).children){
                        if (dp.equals(p)){
                            groups.get(i).children.remove(p);
                            groupId=i;
                            break;
                        }
                    }
                }
            }
            if (groupId >= 0 && groups.get(groupId).children.size() ==0){
                groups.remove(groupId);
            }

        }
    }



    public void modifyChild(DatiProdotto prev, DatiProdotto post) {
        Categoria cat = new Categoria(prev.getCategoria(), prev.getNomeCategoria(), prev.getTagCat());
        if (categoriaPresente(cat, getCategorie())) {
            for (int i = 0; i < groups.size(); i++) {
                if (groups.get(i).c.equals(cat)) {
                    int j = 0;
                    for (DatiProdotto dp: groups.get(i).children){
                        if (dp.equals(prev)){
                            groups.get(i).children.get(j).setIdItem(post.getIdItem());
                            groups.get(i).children.get(j).setNome(post.getNome());
                            groups.get(i).children.get(j).setNum(post.getNum());
                            break;
                        }
                        j++;
                    }
                }
            }
        }
    }

Qualche idea???

Grazie a tutti dell'attenzione!
Buona serata di codice :D