CustomAdapter - ListItem Hintergrund ändern

  • 2 Antworten
  • Letztes Antwortdatum
GENiALi

GENiALi

Fortgeschrittenes Mitglied
11
Hallo

Ich generiere eine Liste mit Kontakten die abgearbeitet werden müssen. Das hiesst, 10 Kontakte und man muss beim ersten beginnen. Erst danach kann man den nächsten wählen u.s.w.

In der ListView, mit den Kontakten, sind die wählbaren Items mit einem blauen Hintergrund versehen.

Die ganze logik funktioniert wunderbar. Auch das setzen des nächsten Items macht keine Probleme. NUR, die Änderung zeigt sich nicht auf dem Display. Wenn z.B. der zweite Eintrag an der Reihe wäre, der wäre auch auf blau gesetzt, bleibt der einfach in der default Farbe. Erst wenn ich die Liste verschiebe, der zweite Eintrag aus dem sichtbaren Bereich kommt, ihn zurückschiebe, er also wieder in den sichtbaren Bereich kommt, erst dann ist er blau. Wie ändert man einen Eintrag zur Laufzweit?

In der getView Methode des Adapters habe ich ein ClickListener auf der View.

Code:
view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Nur der Blaue ist Klickbar
        if (isEnabled(getPosition(emergency))) { //Prüfen ob man den aktuellen Eintrag klicken darf
            if (callUser(emergencies.get(currentPosition))) { //Anruf tätigen
                    //Erfolgreich
                    contactEmergencyUser.finish(23);
                } else {
                    //Nicht erfolgreich. Nächster Eintrag selektieren
                    v.setBackgroundResource(0); //Aktuelle View Hintergrund zurücksetzen
                    currentPosition++; //eine Postition nach vorn rücken.
                    View view1 = getView(currentPosition, null, null); //nächste View holen
                    if (view1 != null) {
                        view1.setBackgroundResource(android.R.color.holo_blue_dark); //Hintergrund setzten
                        view1.invalidate(); //neu zeichnen erzwingen. Bringt allerdings nichts.
                    } else {
                        contactEmergencyUser.finish(24);
                    }
                }
        }

        // Erst aufrufen wenn komplett fertig und niemand erreicht wurde.
        // contactEmergencyUser.finish(24);
    }
});
Ich dachte eigentlich mit dem invalidate() erzwinge ich das neuzeichnen. Dem scheint aber nich so zu sein. Wie erreich ich nun diese Anforderung?
 
Versuch mal notifyDataSetChanged() mit dem Adapter aufzurufen.
 
Vacutainer schrieb:
Versuch mal notifyDataSetChanged() mit dem Adapter aufzurufen.
Resultiert in einem Crash.

Ich habe nun die Verantwortungen neu verteilt. Der Adapter ist nur noch für die Daten zuständig. Das ListView für die Logik. Dann klappt es ziemlich gut. :)
 
Zurück
Oben Unten