CustomAdapter index refresh

  • Hallo zusammen,
    ich habe einen


    CustomAdapterAdresse extends ArrayAdapter<Adresse> impelments android.location.LocationListener



    im OnclickListener lösche ich einen Eintrag aus der DB und aus der Liste:


    public View getView(final int position, View convertView, ViewGroup parent) ....
    ...
    ...
    adressList.remove(position);

    notifyDataSetChanged();



    das funktioniert leider nur beim ersten mal, da der Index der Liste nicht aktualisiert wird.


    was mache ich falsch?



    Ich danke euch

  • Versuch es mal mit einem überschriebenen ListIterator.
    Dort definierst du dann, das wenn etwas gelöscht wird, alles dahinter einen Index nach vorne geht, bis es keinen Nachfolger hat.
    Das sollte gehen ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • ichhab hier mal die komplette Klasse:


  • Hoi,


    hast du die Klasse und variablen zwischenzeitlich umbenannt oder hast du den falschen Adapter erwischt? Irgendwie bin ich etwas verwirrt ^^


    Ich denk das mal "laut" durch:
    Also du hast einen Adapter, da sind 5 Elemente drin. Du löschst das 2. Element also position ist 1. Rufst also die .remove auf, der wirft das 2. Element weg. Jetzt müsste eigentlich adressList.get(position) das ursprünglich 3. Element in der Liste liefern. Tut er das? Debug das mal. Änder auch mal zum Test dein List in ArrayList.


    Gruß,
    Matze

  • alssooo


    ich habe 4 Einträge in der Liste
    beim Löschen des 3ten Eintrages steht richtig 2 in position


    adressfinderList.remove(position);


    beim nächsten löschen des (jetzt richtig angezeigten) 2 ten Eintrags steht immer noch 2 in position und der falsche, also dritte, Eintrag wird gelöscht :(

  • mal langsam
    ein adressfinderList.get(position);
    NACH dem remove liefert richtig den nächsten eintrag, in position steht aber noch der alte index.


    Heisst das, dass ich vor dem remove einfach ein get brauche?
    EDIT: Quatsch da steht ja der falsche index drin?


    was meinst du welche Variable soll ich übergeben?
    EDIT: muss jetzt leider weg, ich schau heut abend nochmal rein.


    ich danke dir

  • Irgendwie check ich das Problem nicht.


    Wo wird wann wie was warum gelöscht?
    Teilst du deiner Liste auch mit, dass sich die zu Grunde liegenden Daten verändert haben?

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«


  • Ich hätts mal so probiert. Du hast ja bereits das Objekt selbst und List.remove(object) müsste eigentlich genau das Objekt auch finden.




    Aber irgendwie kommt mir der Aufbau generell etwas seltsam vor ... das ganze in der getView machen, die wird ja mehrfach aufgerufen. Ich stell mir die Frage ob er evtl. schon im nächsten getView steckt, während der OnClickListener in einem eigenen Thread läuft und verhaut deshalb die Position .... probier den Code oben mal aus, vll. fruchtet es ja.



    Gruß,
    matze

  • Hallo Matze,


    adressfinderList.remove(adressfinder); funktioniert!
    Ich danke dir.


    Dass dir der Aufbau seltsam vorkommt, liegt vieleicht daran, dass sich auf jedem Listeneintrag ein Löschbutton befindet.


    Wie komme ich sonst da dran ausser im onClickListener der view?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!