Android: Update ListView-Elemente alle 1 minute
Habe ich eine Custom ListView-Steuerelement in meiner Anwendung, die eine Bildansicht und 3-5 TextViews.
1 des TextViews zeigt die zeitliche Lücke zwischen der aktuelle Zeit und die angegebenen Zeit für das ListView-Element.
Wie: Geschrieben 5 Minuten her
Die Frage ist, wie kann ich ein update dieses TextView jede minute ohne jegliche Störung der ListView.
Wie: wenn ich freue mich auf die ListView für 5 Minuten, nur das TextView allein ändern müssen von 1 min bis 2 Minuten, so dass für jedes Element sichtbar
, Was ich versucht habe:
- Satz dieses TextView in getView() mit
System.currentTimeMillis() - givenTime[position];
aber hier die TextView wird nicht aktualisiert, wenn ich nicht scrollen (nicht den Aufruf der getView) oder ändern die Sichtbarkeit der Elemente.
- Verwenden timeTask() thread alle 1 minute und versuchen Sie, aktualisieren Sie die TextView jedes Element
hier das problem ist, ich bekomme eine Exception:
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
außerdem habe ich keine Ahnung wie ich das ändern das TextView für jedes ListView-Element der Aktivität.
Aber das sieht aus wie ein vertrautes Fall.
Wie kann ich das erreichen?
Danke
InformationsquelleAutor Archie.bpgc | 2012-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
Handler
und seinepostDelayed
- Methode zur Invalidierung der Liste der adapter wie folgt:Müssen Sie nur das update UI in der main (UI) - thread.
Durch die Schaffung der handler in der main-thread, stellen Sie sicher, dass Sie alles, was Sie post an den handler laufen im main thread auch.
Es wird aktualisieren Sie die Listenansicht, egal, ob Daten geändert wurden oder nicht.
fein. Es arbeitete. Vielen Dank. Aber was ich dachte, war in der Regel Anwendungen aktualisieren nur die TextView nicht die ganze ListView-Element. Nicht diese verursachen eine Verzögerung oder ein UI-freeze, wenn das ListView-Element ist zu kompliziert? wie, wenn es enthält 2-3 Bilder, 3-5 TextViews??
Es wird bei jedem update Anzeigen, die in jeder sichtbare ListView-Element, aber es sollte nicht viel von einem problem. Wenn Sie besorgt über die Leistung beim Rendern von Bildern, können Sie immer überprüfen, dass die Bildansicht leer ist, bevor Sie versuchen zu machen, es zeigt eine (potenziell) neues Bild
fehlende Semikolon nach new Handler()
InformationsquelleAutor JesperB
Können Sie auch benutzerdefinierte
TextView
welche updates es sich selbst jede Sekunde oder minute oder Stunde. Dies kann leicht getan werden, indem das erstellen der Klasse, die erweitertTextView
und fügen Sie Handler in dieser Klasse. Vorteile sind, dass Sie nicht haben, um aktualisieren Sie Ihre ganze ListView, TextView aktualisiert sich automatisch.Beispiel:
Verwendung:
Ausgang wird wie folgt Aussehen:
Wenn Sie wollen, um die Sekunden anzuzeigen ändern Sie auch
convertDatesToMinutes(long start, long end)
Methode:Wenn Sie die benutzerdefinierte Liste verwenden-adapter extends BaseAdapter, müssen Sie rufen Sie ListAdapter.notifyDataSetChanged(); und in-adapter getView(); Methode, die Sie rufen stopTimer();
InformationsquelleAutor user1888162
Verwenden Sie die integrierte in TimerTask
http://developer.android.com/reference/java/util/TimerTask.html
Ist dies eine gute Art, Dinge zu tun.
InformationsquelleAutor slott
Wenn Sie möchten, wiederholen Sie eine Aktion in der main-thread in Bruchteilen der Zeit, die Sie verwenden sollten "Zeitplan" - Methode der Time.class
InformationsquelleAutor pablopatarca