ProgressBar Result & Style

D

Droidspirit

App-Anbieter (In-App)
50
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

Code:
style="?android:attr/progressBarStyleHorizontal"
Mein erstes Problem ist, dass die, die ich im Standard-Design erstellt habe, also ganz einfach:

Code:
<ProgressBar
android:id="@+id/pb_progressbar_standard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
falsch angezeigt wird. Im Anhang habe ich mal ein Screenshot angehängt. 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:

Code:
package de.dev;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class ProgressBarActivity extends Activity{

    private ProgressBar pb_horizontalProgressBar;
    private int myProgress = 0;
    private TextView tvStatus;
    private Handler myHandle = new Handler();

     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_progressbar);
        
        
        pb_horizontalProgressBar = (ProgressBar)findViewById(R.id.pb_progressbar_horizontal);
        tvStatus = (TextView)findViewById(R.id.lb_status);
        
        new Thread(myThread).start();

        Button btZurueck = (Button)findViewById(R.id.bt_zurueck);
        btZurueck.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                
                Intent intent = new Intent();
                setResult(RESULT_OK, intent);
                finish();
                
            }
        });
    }
     
     
    private Runnable myThread = new Runnable(){

        @Override
        public void run() {
            
            tvStatus.setText("Status: In Progress...");
            
            while (myProgress < 100){
                try{
                    myHandle.sendMessage(myHandle.obtainMessage());
                    Thread.sleep(50);
                    System.out.println(myProgress);
                    
                    
                    myHandle.post(new Runnable() {
                        public void run() {
                            myProgress++;
                            pb_horizontalProgressBar.setProgress(myProgress);
                        }
                    });

                } catch(Throwable t){
                    t.printStackTrace();
                }
                
            }
        }
    };
}
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
 

Anhänge

  • progress.PNG
    progress.PNG
    1,6 KB · Aufrufe: 245

Ähnliche Themen

H
Antworten
0
Aufrufe
610
Hcman
H
A
  • andymcnab
Antworten
7
Aufrufe
912
jogimuc
J
M
Antworten
3
Aufrufe
852
maksimilian
M
Zurück
Oben Unten