Programm ablauf

  • Antworten:7
Andreas D.
  • Forum-Beiträge: 84

26.03.2013, 23:59:02 via Website

Guten Abend :)

Eine Frage zu meiner kleinen App.

Wieso wird der MediaPlayer gestartet, aber meine beden TextViews werden erst nach dem ausführen von Pause.verzoegerung() geändert?

1public void onClick(View v) {
2
3 TextView text2 = (TextView)findViewById(R.id.aufforderung); //TextView´s werden geändert
4 text2.setText(null);
5 TextView text = (TextView)findViewById(R.id.beg);
6 text.setText("Ich liebe dich");
7
8
9 mediaPlayer.start(); // Startet Wiedergabe von Lied
10
11 Pause.verzoegerung();
12
13 newImage = getResources().getDrawable(R.drawable.messe); //Absturz
14 imageView.setImageDrawable(newImage);
15 }

Methode verzoegerung:

1public void verzoegerung() {
2 try {
3 Thread.sleep(5000);
4 } catch (InterruptedException e) {
5 // TODO Auto-generated catch block
6 e.printStackTrace();
7 }

Danke für Antworten, ich verstehe den Fehler echt nicht.. also was mein Denkfehler ist ^^

Antworten
Appsoluts
  • Forum-Beiträge: 304

27.03.2013, 00:50:03 via Website

Wie in deiner anderen Frage... ließ dir die Definition eines Threads durch...

Arbeite mit einem Handler um deine TextViews zu setzen

Antworten
impjor
  • Forum-Beiträge: 1.793

27.03.2013, 10:56:19 via Website

:wacko::wink:ARGH:wacko::wink:
Das sieht jezt so aus, als ob du den UI-Thread für 5 Sekunden lahm legst.... Da hast du Glück, dass noch keine "Tut uns leid, die App reagiert nicht"-Meldung aufgetaucht ist!
Anscheinend änderst du den Inhalt der TextViews und spielst dann den Sound ab, soweit so gut. Allerdings werden die TextViews nicht sofort neu gezeichnet, sodass man die Änderung sieht, sondern wann das Android-System es für nötig hält. Dies passiert aber so schnell, dass man keine Verzögerung feststellt. Du blockierst aber den Thread mit warten, sodass deine komplette Anwendung (also auch Buttons, etc.) "einfrieren".
Abhilfe schafft ein Thread (s. CBSol Android). Eine andere Möglichkeit ist es einen Handler zu erstellen, und dann dessen postDelayed-Methode aufzurufen. Diese erwartet zwei Argumente: Einmal, was gemacht werden soll (in Form einnes Runnables) und einmal, nach wievielen millisekunden das Runnable ausgeführt werden soll. (Google einfach mal, ist recht einfach) Dann hasst du auch keine Probleme damit das ImageView zu verändern.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Appsoluts
  • Forum-Beiträge: 304

27.03.2013, 13:43:47 via Website

mach es so:

public void onClick(View v) {
TextView text2 = (TextView)findViewById(R.id.aufforderung); //TextView´s werden geändert
text2.setText(null);
TextView text = (TextView)findViewById(R.id.beg);
text.setText("Ich liebe dich");

mediaPlayer.start(); // Startet Wiedergabe von Lied

for(int i=0;i<BIS LIED VORBEI ODER WIE LANGE AUCH IMMER;i++{
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
newImage = getResources().getDrawable(R.drawable.messe); //NEUES BILD WIRD IMMER HIER GESETZT
imageView.setImageDrawable(newImage);
}
}, 5000);
}

}

Antworten
Andreas D.
  • Forum-Beiträge: 84

27.03.2013, 17:53:21 via Website

CBsol Android
mach es so:

public void onClick(View v) {
TextView text2 = (TextView)findViewById(R.id.aufforderung); //TextView´s werden geändert
text2.setText(null);
TextView text = (TextView)findViewById(R.id.beg);
text.setText("Ich liebe dich");

mediaPlayer.start(); // Startet Wiedergabe von Lied

for(int i=0;i<BIS LIED VORBEI ODER WIE LANGE AUCH IMMER;i++{
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
newImage = getResources().getDrawable(R.drawable.messe); //NEUES BILD WIRD IMMER HIER GESETZT
imageView.setImageDrawable(newImage);
}
}, 5000);
}

}

Danke :)

eine frage, wenn ich immer andere bilder erscheinen lassen will, wie mache ich das? ich kann ja nicht eine zweite Variable "x" nehmen und diese dann auch hochlaufen lassen wie "i", weil ich ja bei R.drawable... keine Variable einsetzen kann, oder doch?

Antworten
Appsoluts
  • Forum-Beiträge: 304

27.03.2013, 19:40:10 via Website

nein das geht nicht.

Entweder du erstellst dir vorher ein Array und lädst da alle Grafiken rein oder halt einfacher ne Liste.

Antworten
impjor
  • Forum-Beiträge: 1.793

27.03.2013, 23:35:26 via App

Doch. Überall wo du R.drawable.abc einsetzt, kannst du auch getResources.getIdentifier("abc", "drawable", getPackageName()); einsetzen.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Appsoluts

Antworten
Appsoluts
  • Forum-Beiträge: 304

28.03.2013, 01:05:36 via Website

impjor
Doch. Überall wo du R.drawable.abc einsetzt, kannst du auch getResources.getIdentifier("abc", "drawable", getPackageName()); einsetzen.

Gruß

hast recht

Antworten