
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.
Ich dachte eigentlich mit dem invalidate() erzwinge ich das neuzeichnen. Dem scheint aber nich so zu sein. Wie erreich ich nun diese Anforderung?
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);
}
});