TheEvilOne
- Forum-Beiträge: 311
26.07.2010, 09:02:37 via Website
26.07.2010 09:02:37 via Website
Hallo,
ich bin gerade dabei ein bißchen mit ProgressBars rumzuspielen. Dafür habe ich 2 Stück in einer Activity bzw. xml erstellt. Die eine habe ich im Standard-Style erstellt und die andere in einem horizontalen Design mit
Mein erstes Problem ist, dass die, die ich im Standard-Design erstellt habe, also ganz einfach:
falsch angezeigt wird. Hier habe ich mal ein Screenshot. Eigentlich sollte die obere ProgressBar aber doch so aussehen wie hier.
Kann mir jemand sagen, was ich da falsch gemacht habe?
Und zu meinem zweiten Problem:
In der Activity starte ich einen Thread, in dem ich einen int-Wert hochzähle und das an die horizontale ProgressBar weitergebe. Diese zählt somit hoch.
Hier erstmal der Code der Activity:
Ich übergebe dem TextView im Thread den String "Status: In Progress...". Wenn der Thread fertig bzw. beendet ist, möchte ich dass der Status der TextView sich in "done" ändert. Und eben genau hier ist der Knackpunkt. Ich weiß nicht, wie ich herausfinden kann, wann der Thread beendet ist. Wenn ich nach der while-Schleife versuche dem TextView über die setText() einen String mitzugeben, bekomme ich hier eine Exception, dass dies im falschen Thread übergeben worden ist. Über eine Callback-Methode habe ich es auch schon versucht, das hat aber irgendwie auch nicht funktioniert.
Kann mir hier jemand einen Tipp geben?
Danke und viele Grüße
ich bin gerade dabei ein bißchen mit ProgressBars rumzuspielen. Dafür habe ich 2 Stück in einer Activity bzw. xml erstellt. Die eine habe ich im Standard-Style erstellt und die andere in einem horizontalen Design mit
1style="?android:attr/progressBarStyleHorizontal"
Mein erstes Problem ist, dass die, die ich im Standard-Design erstellt habe, also ganz einfach:
1<ProgressBar
2android:id="@+id/pb_progressbar_standard"
3android:layout_width="wrap_content"
4android:layout_height="wrap_content"
2android:id="@+id/pb_progressbar_standard"
3android:layout_width="wrap_content"
4android:layout_height="wrap_content"
falsch angezeigt wird. Hier habe ich mal ein Screenshot. Eigentlich sollte die obere ProgressBar aber doch so aussehen wie hier.
Kann mir jemand sagen, was ich da falsch gemacht habe?
Und zu meinem zweiten Problem:
In der Activity starte ich einen Thread, in dem ich einen int-Wert hochzähle und das an die horizontale ProgressBar weitergebe. Diese zählt somit hoch.
Hier erstmal der Code der Activity:
1package de.dev;
2
3import android.app.Activity;
4import android.content.Intent;
5import android.os.Bundle;
6import android.os.Handler;
7import android.os.Message;
8import android.view.View;
9import android.widget.Button;
10import android.widget.ProgressBar;
11import android.widget.TextView;
12
13public class ProgressBarActivity extends Activity{
14
15 private ProgressBar pb_horizontalProgressBar;
16 private int myProgress = 0;
17 private TextView tvStatus;
18 private Handler myHandle = new Handler();
19
20 @Override
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.layout_progressbar);
24
25
26 pb_horizontalProgressBar = (ProgressBar)findViewById(R.id.pb_progressbar_horizontal);
27 tvStatus = (TextView)findViewById(R.id.lb_status);
28
29 new Thread(myThread).start();
30
31 Button btZurueck = (Button)findViewById(R.id.bt_zurueck);
32 btZurueck.setOnClickListener(new View.OnClickListener() {
33 public void onClick(View view) {
34
35 Intent intent = new Intent();
36 setResult(RESULT_OK, intent);
37 finish();
38
39 }
40 });
41 }
42
43
44 private Runnable myThread = new Runnable(){
45
46 @Override
47 public void run() {
48
49 tvStatus.setText("Status: In Progress...");
50
51 while (myProgress < 100){
52 try{
53 myHandle.sendMessage(myHandle.obtainMessage());
54 Thread.sleep(50);
55 System.out.println(myProgress);
56
57
58 myHandle.post(new Runnable() {
59 public void run() {
60 myProgress++;
61 pb_horizontalProgressBar.setProgress(myProgress);
62 }
63 });
64
65 } catch(Throwable t){
66 t.printStackTrace();
67 }
68
69 }
70 }
71 };
72}
2
3import android.app.Activity;
4import android.content.Intent;
5import android.os.Bundle;
6import android.os.Handler;
7import android.os.Message;
8import android.view.View;
9import android.widget.Button;
10import android.widget.ProgressBar;
11import android.widget.TextView;
12
13public class ProgressBarActivity extends Activity{
14
15 private ProgressBar pb_horizontalProgressBar;
16 private int myProgress = 0;
17 private TextView tvStatus;
18 private Handler myHandle = new Handler();
19
20 @Override
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.layout_progressbar);
24
25
26 pb_horizontalProgressBar = (ProgressBar)findViewById(R.id.pb_progressbar_horizontal);
27 tvStatus = (TextView)findViewById(R.id.lb_status);
28
29 new Thread(myThread).start();
30
31 Button btZurueck = (Button)findViewById(R.id.bt_zurueck);
32 btZurueck.setOnClickListener(new View.OnClickListener() {
33 public void onClick(View view) {
34
35 Intent intent = new Intent();
36 setResult(RESULT_OK, intent);
37 finish();
38
39 }
40 });
41 }
42
43
44 private Runnable myThread = new Runnable(){
45
46 @Override
47 public void run() {
48
49 tvStatus.setText("Status: In Progress...");
50
51 while (myProgress < 100){
52 try{
53 myHandle.sendMessage(myHandle.obtainMessage());
54 Thread.sleep(50);
55 System.out.println(myProgress);
56
57
58 myHandle.post(new Runnable() {
59 public void run() {
60 myProgress++;
61 pb_horizontalProgressBar.setProgress(myProgress);
62 }
63 });
64
65 } catch(Throwable t){
66 t.printStackTrace();
67 }
68
69 }
70 }
71 };
72}
Ich übergebe dem TextView im Thread den String "Status: In Progress...". Wenn der Thread fertig bzw. beendet ist, möchte ich dass der Status der TextView sich in "done" ändert. Und eben genau hier ist der Knackpunkt. Ich weiß nicht, wie ich herausfinden kann, wann der Thread beendet ist. Wenn ich nach der while-Schleife versuche dem TextView über die setText() einen String mitzugeben, bekomme ich hier eine Exception, dass dies im falschen Thread übergeben worden ist. Über eine Callback-Methode habe ich es auch schon versucht, das hat aber irgendwie auch nicht funktioniert.
Kann mir hier jemand einen Tipp geben?
Danke und viele Grüße
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.