1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

ProgressBar Result & Style

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von TheEvilOne, 23.07.2010.

  1. TheEvilOne, 23.07.2010 #1
    TheEvilOne

    TheEvilOne Threadstarter App-Anbieter (In-App)

    Beiträge:
    452
    Erhaltene Danke:
    50
    Registriert seit:
    19.05.2010
    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:

Diese Seite empfehlen