TextView automatisch neu zeichnen

  • 5 Antworten
  • Neuester Beitrag
Diskutiere TextView automatisch neu zeichnen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
F

Flixius

Fortgeschrittenes Mitglied
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:
S

swordi

Lexikon
wahrscheinlich weil dein ui thread blockiert ist ?
 
F

Flixius

Fortgeschrittenes Mitglied
zu verworren. alles weg hier!
 
Zuletzt bearbeitet:
F

Flixius

Fortgeschrittenes Mitglied
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. :)
 
T

Tom299

Stammgast
Sowas kann man sicher auch mit Handlern und normalen Java-Threads bauen, klingt jedenfalls schon verworren, was du schreibst ;-)
 
S

swordi

Lexikon
handler und threads sind aber noch unübersichtlicher
 
Ähnliche Themen - TextView automatisch neu zeichnen Antworten Datum
4