Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Text mit Verzögerung ausgeben

Das Thema "Text mit Verzögerung ausgeben" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 24.05.2011, 07:54   #1 (permalink)
Neuer Benutzer

Registriert seit: 28.04.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard Text mit Verzögerung ausgeben

hallo, ich habe folgendes problem:

drückt man den button soll eine variable durch 2 geteilt und soll dann in ein textview ausgegeben werden, indem der wert in einer schleife immer um 1 verringert wird und dann erst ausgegeben wird.

funktioniert soweit auch super bis auf die verzögerung:
Code:
try {Thread.sleep(100);}
catch (InterruptedException e) 
{e.printStackTrace();}
Code:
final Button P2_Durch = (Button) findViewById(R.id.P2_Durch);
        P2_Durch.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                Player2_temp = Player2;
                Player2 = Player2 / 2;
                
                while (Player2_temp > Player2){
     
                    try {Thread.sleep(100);}
                    catch (InterruptedException e) 
                    {e.printStackTrace();}
            
                --Player2_temp;
                
                TextView P2 = (TextView) findViewById(R.id.Player2);
                P2.setText(new Integer(Player2_temp).toString());
                }
                rechnung = 0;
                TextView tv1 = (TextView) findViewById(R.id.Rechner);
                tv1.setText(new Integer(rechnung).toString());
                defeat();
            }});
gozza ist offline   Mit Zitat antworten
Alt 24.05.2011, 09:02   #2 (permalink)
Android Experte
 
Benutzerbild von DieGoldeneMitte

Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
Standard AW: Text mit verzögerung ausgeben

Der OnClickListener wird im UI-Thread ausgeführt. Damit blockierst Du de facto das Gerät. Nicht gut.

Starte einen eigenen Thread, der wartet und dann den Inhalt des TextViews nach deinen Wünschen ändert. Je nachdem, wie Du das machst, musst Du dann einen Handler nehmen, um die Änderung dann wieder im UI Thread zu machen.

Alternativ gibt da noch "Mitteilungsfunktionen" postInvalidate() und Konsorten. Habe aber auch noch nicht ganz durchdrungen, wann diese reichen.

Viellecht kann ja jemand mal erklären, wann man am besten was macht
__________________
Kein Support via PN/eMail. Bitte das Forum benutzen - dort haben alle etwas davon.
Bei Entwicklerfragen zu abstürzenden Apps bitte immer die Ausgabe von LogCat posten.
Tipp: Zum "Danke" sagen gibt es einen Button.
DieGoldeneMitte ist offline   Mit Zitat antworten
Alt 25.05.2011, 11:35   #3 (permalink)
Neuer Benutzer

Registriert seit: 28.04.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: Text mit Verzögerung ausgeben

Ich habs mal so probiert, leider stürzt das Programm ohne Fehlermeldung ab

Code:
final Button P2_Durch = (Button) findViewById(R.id.P2_Durch);
        P2_Durch.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click

                Player2_temp = Player2;
                Player2 = Player2 / 2;
                TextView tv1 = (TextView) findViewById(R.id.Rechner);

                    tv1.setText("");

                    Thread t = new Thread(new Runnable(){


                        public void run() {

                            TextView P2 = (TextView) findViewById(R.id.Player2);

                                P2.setText(new Integer(count).toString());}
                        });

                 for(int count = Player2_temp; count>Player2; count--){
                     try {Thread.sleep(1);}
                     catch (InterruptedException e)
                     {e.printStackTrace();}
                     t.start();
                    }

                defeat();
            }

});
gozza ist offline   Mit Zitat antworten
Alt 25.05.2011, 13:01   #4 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: Text mit Verzögerung ausgeben

das programm stürtzt sicher nicht ohne fehlermeldung ab. das glaub ich dir nicht

ein Thread.sleep(1) bewirkt eine verzögerung von 1 milisekunde. das wird wohl nicht genug sein
__________________
App Entwicklung
Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD )
swordi ist offline   Mit Zitat antworten
Alt 25.05.2011, 13:02   #5 (permalink)
Android Experte
 
Benutzerbild von DieGoldeneMitte

Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
Standard AW: Text mit Verzögerung ausgeben

Das ohne Fehlermeldung glaube ich nicht. Schau mal ins LogCat.

Das ist ja genau falschherum. Der sleep soll in einen externen Thread. Du hast den sleep im UI Thread und im Thread die Anweisung, was an der UI zu machen.

Ein zeitverzögertes UI Update sollte in etwa so aussehen:


Code:
class MeineActivity extends Activity {
...
  Handler handler = new Handler();
...
  irgendeinButton.setOnClickListener( new OnClickListener() {
    public void onClick( View v ) {
      // Wird im UI Thread ausgeführt
      Thread t = new Thread( new Runnable() {
        public void run() {
           // eigener Thread, hier darf man sleep, aber keine UI Updates machen.

           // melde aktionen an, die der UI Thread ausführen soll
           handler.post( new Runnable() {
             public void run() {
                // das hier wird wieder im UI thread gemacht
             }
           } );
        });
        t.start();
     });
...
}
PS: Bitte rücke deinen Code richtig ein und schreib die Variablennamen klein - muss nicht, ist aber Konvention. Macht es leichter, dir zu helfen.
__________________
Kein Support via PN/eMail. Bitte das Forum benutzen - dort haben alle etwas davon.
Bei Entwicklerfragen zu abstürzenden Apps bitte immer die Ausgabe von LogCat posten.
Tipp: Zum "Danke" sagen gibt es einen Button.
DieGoldeneMitte ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei DieGoldeneMitte für diesen Beitrag:
Nivel (03.07.2011)
Alt 25.05.2011, 13:02   #6 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: Text mit Verzögerung ausgeben

du solltest einen handler nehmen

und dort mit postDelayed etwas ausführen.

ein thread.sleep ist, wie schon gesagt, blockierend. das ist nicht gut
__________________
App Entwicklung
Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD )
swordi ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei swordi für diesen Beitrag:
Nivel (03.07.2011)
Alt 25.05.2011, 19:39   #7 (permalink)
Neuer Benutzer

Registriert seit: 28.04.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: Text mit Verzögerung ausgeben

es wurde tatsächlich kein fehler ausgegeben, im logcat stand nichts. das programm hat sich im emulator einfach geschlossen.

aber besten dank, ich habs jetzt zum laufen gebracht



Code:
        final Button P2_Durch = (Button) findViewById(R.id.P2_Durch);
        P2_Durch.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Wird im UI Thread ausgeführt
                Player2_temp = Player2;
                Player2 = Player2 / 2;
                TextView tv1 = (TextView) findViewById(R.id.Rechner);
                tv1.setText("");
                Thread t = new Thread( new Runnable() {
                  public void run() {
                     // eigener Thread, hier darf man sleep, aber keine UI Updates machen.
                      while (Player2_temp > Player2){
                          --Player2_temp;
                          try {Thread.sleep(1);}
                          catch (InterruptedException e) 
                                  {e.printStackTrace();}
                // melde aktionen an, die der UI Thread ausführen soll
                          handler.post( new Runnable() {
                              public void run() {
                          // das hier wird wieder im UI thread gemacht
                                  TextView P2 = (TextView) findViewById(R.id.Player2);
                                  P2.setText(new Integer(Player2_temp).toString());
                              }
                          });
                      }
                  }
                });
                  t.start();
            }
        });

Geändert von gozza (25.05.2011 um 19:47 Uhr)
gozza ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei gozza für diesen Beitrag:
Nivel (03.07.2011)
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Verzögerung bei Anrufannahme mit Gingerbread jawe Nexus One Forum 31 09.05.2011 13:47
Text ausgeben themerx Android App Entwicklung 3 04.03.2011 12:19
Notizapp mit Widget, formatiertem Text, eingefärbten Buttons, Speichern&Ausgabe Text moppelg Android Codeschnipsel 5 26.09.2010 14:42
Nexus One erkennt Mediadateien von der SD mit verzögerung kora2111 Nexus One Forum 7 13.07.2010 23:15
Verzögerung bei VOIP mit dem Galaxy marvinp Kommunikation 7 28.01.2010 20:46




Du liest gerade: "Text mit Verzögerung ausgeben" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.