Button Click

P

Peter123

Fortgeschrittenes Mitglied
8
Also ich möchte, wenn auf einen Button geklickt wird, dass eine Sekunde gewartet wird, dann das Hintergrundbild geändert wird, wieder eine Sekunde gewartet wird und nochmals das Bild geändert wird.

Habe mir das so gedacht, dass folgende Methode aufgerufen wird, wenn der Button geklickt wird:

Code:
public void aendern(){
    	
    	new Thread(new Runnable() {
    	    public void run() {
    	      try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {}
			
			layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.p1));
			
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {}
			
			layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.p2));
			
			
    	    }
    	  }).start();
    	
    }

Das Ganze funktioniert jedoch nicht und ich bekomme folgenden Fehler...:

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


Wie kann ich das Ganze besser lösen?
 
Stichworte sind:

UI Thread, Handler, AsyncTask

damit hast du alles was du brauchst
 
Entweder so oder einfach mit dem ViewFlipper.
 
aber deine antwort wird ihm nicht weiterhelfen.

dann schaltet er die seite im thread um und bekommt genau den gleichen fehler...
 
Müsste das Ganze dann per AsyncTask so aussehen?

Code:
   class aendern1 extends AsyncTask {
    	   

    	 
    	               protected void onPostExecute() {
                            layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.p1));        
    	               }

			@Override
			protected Object doInBackground(Object... params) {
				// TODO Auto-generated method stub
				 try {
	    	            Thread.sleep(1000);
	    	        } catch (InterruptedException e) {
	    	            e.printStackTrace();
	    	        }
				return null;
			}
    	}

    
    class aendern2 extends AsyncTask {
 	   

	    protected void onPostExecute() {
                   layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.p2)); 
	    }

		@Override
		protected Object doInBackground(Object... params) {
			// TODO Auto-generated method stub
			 try {
    	            Thread.sleep(1000);  
    	        } catch (InterruptedException e) {
    	            e.printStackTrace();
    	        }
			return null;
		}
	}

Und dann beim Klicken:

Code:
new aendern1().execute();
new aendern2().execute();


So passiert nämlich gar nichts.
 
die tasks sehen schonmal ganz gut aus

du rufst aber einfach beide tasks nacheinander auf und wartest jeweils 1 sek. von daher ist die gesamt zeit genau 1 sek

rum mal task 2 im onPostExecute auf, dann wirds besser werden.

btw: informier dich mal nach Java coding standards. das machts für dich und für uns einfacher
 
Da immer noch nichts passiert ist, habe ich mal das Ändern des Backgrounds in die
doInBackground(Object... params){}
Methode geschrieben.
Infolgedessen bekam ich wieder folgenden Fehler:

Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Edit: Habe gerade gesehen, dass das auch so seine Richtigkeit hat.
Aber ich frage mich dennoch, warum das Bild nicht geändert wird...

Edit2: Habe es doch hinbekommen...Lag wohl irgendwie alles an der Parameterübergabe.
 
Zuletzt bearbeitet:

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
332
swa00
swa00
MES
Antworten
10
Aufrufe
813
MES
MES
C
Antworten
8
Aufrufe
1.122
swa00
swa00
Zurück
Oben Unten