Wie programmiere ich eine sich peridisch aktualisierende Liste?

A

arga8361

Neues Mitglied
0
Hallo zusammen

Noch ein Neuling - aber nicht weniger enthusiastisch ;-)

Ich versuche Folgendes:

1. Eine initial leere List<String>
2. Periodisch (z.B. alle 2 Minuten) ein Element hinzufügen
3. Bei jedem Hinzufügen soll der Andriod-Listview aktualisiert werden


Und hier meine Fragen:

a) Wie füge ich periodisch im Hintergrund alle 2 Minuten ein Element hinzu?
b) Wie sorge ich dafür, dass der View aktualisiert wird?

Vielen Dank für jede Hilfe im Voraus.
aka
 
a) timer
b) adapter

guck dir diese sachen an, dann hast du alles was du brauchst
 
  • Danke
Reaktionen: arga8361
arga8361 schrieb:
a) Wie füge ich periodisch im Hintergrund alle 2 Minuten ein Element hinzu?
b) Wie sorge ich dafür, dass der View aktualisiert wird?

Kannst du beides über ne Thread-Klasse lösen.

Code:
 class MeinThread extends Thread
    {    	
    	public void run()
    	{    		
    		while(_run)
    		{
    			try
    			{
                                _view.extendList(); // eigene Methode die das neue Item hinzufügt
   				_view.postInvalidate(); // View updaten
      			        _thread.sleep(/* Zeit in ms */); // Pause
    			}
    					
    			} catch (InterruptedException e) {}
    		}
    	}
    }

Und die ganze Klasse dann als Objekt hinzufügen:

Code:
private MeinThread _thread = new MeinThread();
_thread.start();

Link's zum Thema:
- Using threads and ProgressDialog | Hello Android
- Simple GoogleMaps with Threads :: anddev.org - Android Development Community | Android Tutorials
- das beispiel Programm LunarLander aus der SDK anschauen

mfg
 
  • Danke
Reaktionen: arga8361
Hi

Besten Dank für die Antwort.

Was jetzt klappt ist Folgendes (übrigens: Wie mache ich hier schönes Java-Syntax-Highlighting mit BBcode :confused:):

Code:
package sas.android;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
public class Android005ThreadTest extends Activity implements Runnable {
 private String message;
 private TextView tw;
 // private TextView tv;
 // private ProgressDialog pd;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  this.tw = (TextView) findViewById(R.id.mytext);
  this.tw.setText("Hello");
  Thread thread = new Thread(this);
  thread.start();
 }
 public void run() {
  for (int i = 1; i < 100; i++) {
   try {
    Thread.sleep(800);
    this.message = "Now: " + i;
    this.handler.sendEmptyMessage(0);
   } catch (InterruptedException e) {
   }
  }
 }
 private Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   tw.setText(message);
  }
 };
}


Um zu modularisieren, möchte ich nun die ganze Thread-Geschichte in eine eigene Klasse packen, so wie von Dir vorgeschlagen. Allerdings verstehe ich das Folgende noch nicht:
  1. Wo ist die MeinThread-Klasse in Deinem Beispiel? In der Activity-Klasse selbst? Oder ist das eine ausgekoppelte Klasse in einer eigenen Datei?
  2. In Deinem Beispiel benutzt eine Underscore-Konvention, die ich nicht kenne (z.B. "_run"). Wo kann ich was darüber lesen?
Meine eigenen Versuche, die Klasse zu koppeln, schlagen fehl:

Code:
package sas.android;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
public class Android005ThreadTest extends Activity {
 private String message;
 private TextView tw;
 
 private Handler handler = new Handler() {
  public String buffer;
  @Override
  public void handleMessage(Message msg) {
   tw.setText(message);
  }
 };
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  this.tw = (TextView) findViewById(R.id.mytext);
  this.tw.setText("Hello");
  MeinThread thread = new MeinThread(handler,message);
  thread.start();
 }
}

und die abgekoppelte Klasse:

Code:
package sas.android;
import android.os.Handler;
public class MeinThread extends Thread {
 private Integer i;
 private Handler handler;
 private String message;
 public MeinThread(Handler h, String message) {
  this.handler = h;
  this.message = message;
  this.i = 0;
 }
 public void run() {
  while (true) {
   try {
    this.i++;
    this.message = "Now:" + i;
    this.handler.sendEmptyMessage(0);
    sleep(200);
   } catch (InterruptedException e) {
   }
  }
 }
}

Gerade letztere ist wahrscheinlich totaler Schrott (sorry, bin halt Noob ;-) ). Mir scheint, dass das Threading zwar klappt, aber ich habe keine Ahnung, wie ich den Textview in der Activity setzten soll. Meine hilflosen Versuche seht Ihr ja oben.

Was mache ich falsch, bzw. wie mache ich es richtig?

Besten Dank für Eure Hilfe!

aka
 
hmm in der überschrift steht, du willst eine liste machen und dann kommt im ganzen code keine liste vor ? irgendwie komisch denke ich ?
 
Hey, gut erkannt!

Eins nach dem anderen, wie Du siehst, benutzte ich auch noch keinen ListView. Ich will erst einmal verstehen, wie das mit dem Threading funzt, dann kommt die Liste ;-)
 
vielleicht ist aber die verbindung der beiden sachen über adapter einfacher, als das was du hier versuchst ;)
 
swordi schrieb:
vielleicht ist aber die verbindung der beiden sachen über adapter einfacher, als das was du hier versuchst ;)

Du, ich bin wirklich seeehr Neuling ... und für jedes Beispiel seeehr dankbar ;-) will heissen: Kannst Du ein Stück Code posten?

Thnks
 
aja

wenn du alle immer nach x zeitabständen etwas tun willst, dann tu es lieber mit einem handler als mit thread.sleep().
 
swordi schrieb:
aja

wenn du alle immer nach x zeitabständen etwas tun willst, dann tu es lieber mit einem handler als mit thread.sleep().

Auch hier wieder meine Zustimmung. Thread.sleep() verbraucht mehr Speicher im Background als ein Handler, welcher für eine regelmäßige Aktualisierung sorgt.

Dafür sollte man natürlich sich auch genau vor Augen halten, wie ein Thread bei Java funktioniert.
 

Ähnliche Themen

L
Antworten
15
Aufrufe
890
jogimuc
J
R
Antworten
9
Aufrufe
713
koje71
koje71
Zurück
Oben Unten