Android ringProgressDialog nach Erfolg Button einfärben

BergJava

Aktives Mitglied
Hallo, ich kommunizier mit einer Seriellenschnittstell , um das warten für das Auge aufzuwerten haben ich ein:

Java:
public void verbinden(View v) {
    	final ProgressDialog ringProgressDialog = ProgressDialog.show(MainActivity.this, "Please wait ...", "Connecting...", true);
    	 ringProgressDialog.setCancelable(true);

eingefügt im run() steht das was er ab arbeiten soll:

Java:
 new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				
				try{//Ist Geräte da/Verbingen usw

                               }catch (Exception e){
					
					 
				}
				
		       		 
			
				 if(ringProgressDialog.isShowing()){
					 
					
					ringProgressDialog.dismiss();
					
				}
			
				
			}
		}).start();

Nun zur Frage, wo muss ich den Befehl reinschreiben, das wenn ringprogress beendet und Verbindung besteht:
Java:
((Button) findViewById(R.id.bt_verbinden))
		             .setBackgroundColor(Color.GREEN);
Danke
 

dzim

Top Contributor
Argh... Auch wenn ich am Ende ungefähr verstehe (ich hoffe es zumindest), was du willst, sei mir eine Bitte gestattet: Bevor du einen Post absetzt, liess ihn bitte noch mal durch! Teilweise schreibst du mehrere Sätze in einem "Satz" zusammen, so dass es schlich schwer fällt, der eigentlichen Frage zu folgen (z.B. was jetzt eigentlich das #run mit dem Dialog zu tun hat). Und auch die Flektion einiger Worte... Ach lassen wir das. Wahrscheinlich regst du dich bereits jetzt schon auf, dass ich dich fernab vom Thema kritisiere... :-(

Zum Thema:
Verwende für solche Konstrukte, wie deinen Fall hier, am Besten einen AsyncTask.
In der Quellcode-Dokumentation von Goolge findet sich bereits ein erstes Beispiel, aber auch Lars Vogel hat dazu ein gutes Tutorial (der Link zeigt konrekt auf den Teil des Tutorials, der sich mit AsyncTask befasst, aber vielleicht wäre es auch ratsam, den Rest des Tutorials durchzulesen. Da stehen noch so einige interessante Dinge drin!).

Grundsätzlich - und das machst du ja schon richtig - macht man rechenintensive oder langlaufende Prozesse nicht auf dem Hauptthread, dem sog. UI-Thread, sondern wie du in einem eigenen. Wie man von diesem Thread aus die UI updated, geht am einfachsten, indem du dir den zu updatenden View schon mal in eine Variable speicherst. Borvor du etwas damit machst, solltest du überprüfen, ob die Activity überhaupt noch angezeigt wird (bitte selbst danach suchen). Anschliessend kannst du auf allen von View abgeleteiten Klassen eine Runnable per #post-Methode an den zu updatenden View schicken - dieser wird dann ASAP ausgeführt.
Wahrend das möglich wäre, würde ich dir aber dennoch davon abraten und lieber einen AsyncTask verwenden.
Im Kontruktor deiner AsyncTask-Klasse oder in der #onPreExecute-Methode kannst du einen ProgessDialog initialisierne (so wie du es schon gemacht hast). Die #doInBackground-Methode ist das äquivalent zu deiner #run-Methode in deinem Thread.
Die #doInBackground-Methode ist die einzige, die in einem eigenen Thread ausgeführt wird! ALLE anderen #on<irgendwas>-Methoden laufen auf dem UI-Thread.
Das bedeutet, wenn du von #doInBackground die UI - z.B. den Fortschritt im ProgressDialog - anzeigen möchtest, sendest du in #doInBackground deinen aktualierten Stand mittels der #publishProgress-Methode ab. Behandeln tust du diese Nachricht dann in #onProgressUpdate. Ist deine Arbeit abgeschlossen, kannst du in #doInBackground ein eventuell nötiges Ergebnis zurückgeben. Das wird dann von der #onPostExecute empfangen.
In dieser Methode kannst du dann den ProgressDialog entfernen und deine Farbe auf dem Button setzen.

Noch ein Hinweis
Java:
private class MyTask extends AsyncTask<Params, Progress, Result> { ... }
Params => ist der Klassentyp, den du als Parameter an der #execute-Methode (das Äquivalent zu der #start-Methode eines Threads) übergeben kannst (du kannst mehrere Parameter dieses Typs übergeben). Verarbeitet werden diese dann in der #doInBackground-Methode.
Progress => ist der Klassentyp, den du mittels der #publishProgress-Methode an die #onProgressUpdate-Methode übergibst.
Result => ist der Klassentyp, den ein mögliches Ergebnis haben kann.

Java:
private class MyTask extends AsyncTask<String, Float, Void> { ... }
Würde also bedeuten, dass du einen (oder mehrere Strings) an deinen Task übergibst. Z.B. den Namen einer seriellen Schnittstelle. Integer wäre der Fortschritt in Prozent (0.0 = 0%, 1 = 100%, als Beispiel). Void würde bedeuten, du erwartest keinen speziellen Rückgabewert (in dem Fall musst du in #doInBackground trotzdem ein null zurückgeben). Wenn du für Params auch Void verwendest, ist es nicht mehr notwendig, der #execute-Methode etwas zu übergeben.


Reicht dir das? :p
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
AllBlack Auf der Suche nach einem App-Entwickler Android & Cross-Platform Mobile Apps 1
J Android zugrif auf Thread nach Handy drehen. Android & Cross-Platform Mobile Apps 10
AGW App schließt nach 2 Sekunden Android & Cross-Platform Mobile Apps 2
ruutaiokwu Android Daten von "Activity A" nach "Activity B" umleiten? Android & Cross-Platform Mobile Apps 13
A Android-Studio: 2. Layout nach kurzer Zeit aufzeigen Android & Cross-Platform Mobile Apps 2
B Profilpic wird nach anmeldung nicht angezeigt. Android & Cross-Platform Mobile Apps 2
J BLOB nach dem Download unbrauchbar Android & Cross-Platform Mobile Apps 0
B App schließt nach Start. Android & Cross-Platform Mobile Apps 12
J Android Nach Appsprachenänderung die Systemsprache ermitteln Android & Cross-Platform Mobile Apps 2
G App wird nach Installation auf Smartphone beendet Android & Cross-Platform Mobile Apps 1
B Android wie kann ich in einer xml nach bestimme item suchen (DOM) Android & Cross-Platform Mobile Apps 7
Fischkralle Android Nach Textdateien in Ordner suchen Android & Cross-Platform Mobile Apps 5
V Android Fehlermeldung beim Öffnen von Eclipse nach Installation der Android Erweiterung Android & Cross-Platform Mobile Apps 4
T Android Nach Buttonclick neu laden Android & Cross-Platform Mobile Apps 3
B Android Activity nach gedrückte Returntaste weiterlaufen lassen Android & Cross-Platform Mobile Apps 2
N PriceScannerApp: warum wird nach dem Scannen Display gleich schwarz? Android & Cross-Platform Mobile Apps 4
L Android Bildschirm bleibt dunkel nach neustarten der App nach betätigen des Home-Buttons Android & Cross-Platform Mobile Apps 3
N Android EditText.setError() funktioniert nicht nach Rotation Android & Cross-Platform Mobile Apps 1
B Android Button erstellen nach Vorlage Android & Cross-Platform Mobile Apps 4
L Android Button mit Pfeil nach rechts Android & Cross-Platform Mobile Apps 1
M Android App startet nach Tastensperre neu Android & Cross-Platform Mobile Apps 3
P Android Nach Animation Layout auf alten Platz Android & Cross-Platform Mobile Apps 3
G Werteübergabe nach unbestimmter Zeit Android & Cross-Platform Mobile Apps 28
A Fehlermeldung nach Neuinstallation von Eclipse/bestehenden Projekten... Android & Cross-Platform Mobile Apps 2
E Android App stürzt nach Modifizierung ab Android & Cross-Platform Mobile Apps 2
N Textview macht immer nach einem Beistrich einen Abstand Android & Cross-Platform Mobile Apps 6
K Apps durchsuchen nach verwendeter Methode Android & Cross-Platform Mobile Apps 4
M Android MediaRecorder - Crash nach 2. Start Android & Cross-Platform Mobile Apps 2
S rms recordstore bleibt nach schießen der anwengung nicht erhalten Android & Cross-Platform Mobile Apps 4
M Text in txt-Datei schreiben und nach ABC sortieren? Android & Cross-Platform Mobile Apps 2
H FileConnection: Frage nach Dateisystem-Zugriff unterdrücken Android & Cross-Platform Mobile Apps 5
K suche nach der richtigen dokumentationh Android & Cross-Platform Mobile Apps 2
S ein String nach vorgegebenen Zeichen teilen Android & Cross-Platform Mobile Apps 3
L Ungültiges Java-Archiv (jar) nach Programmentwicklung Android & Cross-Platform Mobile Apps 4
W Volly onErrorResponse trotz Erfolg Android & Cross-Platform Mobile Apps 3

Ähnliche Java Themen

Neue Themen


Oben