| |||||||
Das Thema "Text mit Verzögerung ausgeben" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 28.04.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
| 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();
}}); |
| | |
| | #2 (permalink) |
| Android Experte Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
|
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. ![]() |
| | |
| | #3 (permalink) |
| Neuer Benutzer Registriert seit: 28.04.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
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();
}
}); |
| | |
| | #4 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
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 ) |
| | |
| | #5 (permalink) |
| Android Experte Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
|
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();
});
...
}
__________________ 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. ![]() |
| | |
| Folgender Benutzer bedankt sich bei DieGoldeneMitte für diesen Beitrag: | Nivel (03.07.2011) |
| | #6 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
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 ) |
| | |
| Folgender Benutzer bedankt sich bei swordi für diesen Beitrag: | Nivel (03.07.2011) |
| | #7 (permalink) |
| Neuer Benutzer Registriert seit: 28.04.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
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) |
| | |
| Folgender Benutzer bedankt sich bei gozza für diesen Beitrag: | Nivel (03.07.2011) |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| 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 |