TextView automatisch neu zeichnen

  • 5 Antworten
  • Letztes Antwortdatum
F

Flixius

Fortgeschrittenes Mitglied
4
Hallo,

ich habe möchte zum aktualisieren von Daten keine Loadinganmimation anzeigen, sondern eine Logausgabe (ähnlich wie in einer Dos-Shell) realisieren. Dazu habe ich mir von den Android ApiDemos bedient. Unter Text/LogText gibt es ein schönes Beispiel, dass ich einfach mal kopiert habe.

Leider werden bei mir die Logausgaben erst angezeigt, wenn alles durchgelaufen ist und nicht "live". In diesem Fall wird erst wenn der Download abgeschlossen ist der Inhalt der LogTextBox in der Activity dargestellt. Ich vermute es fehlt einfach so etwas wie ein refresh, das ich nach jeder ausgabe aufrufen müsste, oder?

Hier mein Code:
Code:
setContentView(R.layout.newversionchecker);
    LogTextBox mText = (LogTextBox) findViewById(R.id.logtext);
            mText.append("Starte Datenbankdownload\n");
            long start1 = System.currentTimeMillis();
            String s = httpHelper.GetAndroidObjectViaHttp();
            mText.append("Download fertig ("+ (System.currentTimeMillis() - start1) + " ms)\n");
Die LogTextBox-Klasse leitet von TextView ab und wurde von mir 1:1 aus dem Beispiel übernommen: Android example - LogTextBox.java - android, attributeset, editable, logtextbox, override, text

obligaorisch das XML:
HTML:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingLeft="10dp" >
 
 
 <de.fliese.LogTextBox
        android:id="@+id/logtext"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:scrollbars="vertical"/>

</LinearLayout>
So sieht es im Android API Sample Code aus. Ich will aber wie gesagt nicht über einen Buttonklick die Logausgabe erweitern:
Code:
public class LogTextBox1 extends Activity {
    
    private LogTextBox mText;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.log_text_box_1);
        
        mText = (LogTextBox) findViewById(R.id.text);
        
        Button addButton = (Button) findViewById(R.id.add);
        addButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                mText.append("This is a test\n");
            } });
    }
Über Hilfe wäre ich sehr dankbar!
 
Zuletzt bearbeitet:
wahrscheinlich weil dein ui thread blockiert ist ?
 
zu verworren. alles weg hier!
 
Zuletzt bearbeitet:
Ok.. der Thread kann zu. Habe einige Stunden rumgetüftelt und dann eine ziemlich hässliche Lösung gefunden, die aber letztendlich funktioniert:

Ich rufe einen AsyncTask auf, der zwei weitere AsyncTasks aufruft. Diese machen dann wiederrum die Logausgaben. Ein dritter Task wird dann beim onPostExecute() mit den entsprechenden Paramtern von Task1 aufgerufen. Dieser Task ruft dann wieder einen Task auf, der einen Task aufruft, der einen Task aufruft und so weiter. Von der Codelesbarkeit grausam, aber wengistens funktioniert es endlich. :)
 
Sowas kann man sicher auch mit Handlern und normalen Java-Threads bauen, klingt jedenfalls schon verworren, was du schreibst ;-)
 
handler und threads sind aber noch unübersichtlicher
 

Ähnliche Themen

G
Antworten
1
Aufrufe
364
Gerdchen07
G
S
Antworten
7
Aufrufe
1.138
Silvasurf
S
Zurück
Oben Unten