Atualizando ExpandableListView com notifyDataSetChanged ()

Primeiro um curtoVisão gera do meu código, espero que seja compreensível:

Tenho uma classe chamadaToDoElement com algumas variáveis. Tenho outra classe chamadaToDoListe que gerencia oToDoElements em um ArrayList.ToDoListe contém o métododeleteElement() para excluir umToDoElement do ArrayList Na minha atividade principalliste_activity eu crio um objeto deToDoListe e preencha-o com alguns objetos deToDoElement. Na mesma atividade, tenho um ExpandableListView com meu próprio adaptador chamadoexpListAdapter.O Adaptador cria as visualizações de grupo e de crianças obtendo as variáveis String doToDoElement s. Criei um ContextMenu para cada item do grupo da lista, no qual uso o métododeleteElement().

Ok, agora aqui é o meuproblem:

Depois que eu usei o métododeleteElement() quero atualizar minha lista, porque os dados do ArrayList emToDoListe mudou. Então eu ligo paraexpListAdapter.notifyDataSetChanged().
Mas então toda a minha atividade falha, com o motivo: "IndexOutOfBoundException: índice 4 inválido, tamanho "(Eu tinha 5ToDoELement itens da minha lista, antes de excluir um deles
Sei que é por causa de um dos meus loops, mas não tenho idéia do porqu

ragmentos @Code:

criar o novo objeto ToDoListe:

private static ToDoListe Liste = new ToDoListe();

class ToDoListe (apenas os métodos importantes):

public class ToDoListe {

     private ArrayList<ToDoElement> ToDoListe;

     public ToDoListe()
     {
         ToDoListe = new ArrayList<ToDoElement>();
     }

     public void newElement(ToDoElement element){
         ToDoListe.add(element);
     }

     public void deleteElement(int nummer) {
         ToDoListe.remove(nummer);
     }

     public int AnzahlElemente() {
         return  ToDoListe.size();
     }
}

define list Adaptador:

expListAdapter = new MyListAdapter(this, createGroupList(), createChildList());
setListAdapter( expListAdapter );

criar ArrayLists para o adaptador da lista:

// creates the list with the group items
private List createGroupList() {
      ArrayList result = new ArrayList();
      for (int i=0; i < Liste.AnzahlElemente(); i++) {
        result.add(Liste.getElement(i).getUeberschrift());
      }
      return result;
    }

// creates the list with the child items
private List createChildList() {
        ArrayList result = new ArrayList();
        for(int i=0; i < Liste.AnzahlElemente(); i++) {
            ArrayList secList = new ArrayList();
            for( int n = 1 ; n <= 3 ; n++ ) {
                if (Liste.getElement(i).getStichpunkt(n).length() != 0){
                    secList.add( "- " + Liste.getElement(i).getStichpunkt(n));
                }
            }
            result.add( secList );
        }
        return result;
}

meu próprio adaptador de lista (apenas os métodos importantes):

public class MyListAdapter extends BaseExpandableListAdapter{

private ArrayList<String> ueberschriften;
private ArrayList<ArrayList<String>> stichpunkte;

private LayoutInflater inflater;


public MyListAdapter(Context context, List _ueberschriften, List _stichpunkte) { 

        this.ueberschriften = (ArrayList)_ueberschriften;
        this.stichpunkte = (ArrayList)_stichpunkte;

        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_child, null);
        }
        TextView tv = (TextView) convertView.findViewById(R.id.item_child_title);
        tv.setText(liste_activity.getListe().getElement(groupPosition).getStichpunkt(childPosition));

        return convertView;
    }

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.item_group, null);
    }

    TextView tv = (TextView)convertView.findViewById(R.id.item_group_title);
    tv.setText(liste_activity.getListe().getElement(groupPosition).getUeberschrift());

    return convertView;
}

use de notifyDataSetChanged ():

Liste.deleteElement(groupPos);
expListAdapter.notifyDataSetChanged();


Muito obrigado pela sua atenção!

questionAnswers(6)

yourAnswerToTheQuestion