TextView automatisch neu zeichnen

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

Laser5001
  • Laser5001
Antworten
2
Aufrufe
900
Laser5001
Laser5001
D
  • Data2006
Antworten
14
Aufrufe
486
jogimuc
J
G
Antworten
5
Aufrufe
871
jogimuc
J
Zurück
Oben Unten