2016-07-04 9 views
0

Ich bin neu in Android, habe nicht viel Erfahrung, um Threads zu verwalten. Ich arbeite an einer Aktivität, wo ich Fortschrittsbalken für sagen wir 5 Sekunden anzeigen und dann wiederholen möchte. Während dieser 5 Sekunden werde ich Text anzeigen, damit der Benutzer an dem Text arbeiten kann. Ich möchte das für sagen, N mal wiederholen.Wiederholte ProgressBar-Aktivität für Aufgaben in Android

Derzeit habe ich den folgenden Code, der für 1 solcher Fortschritt funktioniert. Ich habe versucht, es zu loopen, aber es hat nicht geholfen, als Threads zur gleichen Zeit ausgeführt. Wie kann ich dies für N Male wiederholen? Bin ich auf dem richtigen Weg, um mein Problem zu lösen?

public class test extends Activity { 

    private ProgressBar progressBar; 
    private int progressStatus = 0; 
    private TextView textView; 
    private Handler handler = new Handler(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_loop); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
     textView = (TextView) findViewById(R.id.textView1); 
     progressBar.setScaleY(3f); 
     // Start long running operation in a background thread 

     for(int i=0; i<5; i++) 
      Progress(); 

    } 

    public void Progress(){ 
     new Thread(new Runnable() { 
      public void run() { 
       while (progressStatus < 100) { 
        progressStatus += 1; 
        // Update the progress bar and display the 
        //current value in the text view 
        handler.post(new Runnable() { 
         public void run() { 
          progressBar.setProgress(progressStatus); 
          textView.setText(progressStatus+"/"+progressBar.getMax()); 
         } 
        }); 
        try { 
         // Sleep for 200 milliseconds. 
         //Just to display the progress slowly 
         Thread.sleep(100); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }).start(); 
    } 
} 
+0

'Während dieser 5 Sekunden werde ich etwas Text für den Benutzer anzeigen, um an dem Text zu arbeiten. Um an einem Text zu arbeiten, der in einem TextView angezeigt wird? Was sollte der Benutzer damit machen? – greenapps

+0

Starten Sie nicht gleichzeitig fünf Threads. Starten Sie den nächsten Thread, wenn ein Thread fertig ist. Oder lassen Sie den Code in run() fünf Mal in einer Schleife laufen. – greenapps

+0

Was macht es sinnvoll, dass der Benutzer fünf Mal einen Fortschritt sieht? – greenapps

Antwort

0

Ich bin nicht sicher, ich würde empfehlen, das Muster verwenden Sie folgenden sind, aber hier ist die Art und Weise, die Fäden zu bekommen nacheinander ausführen und nicht alle zur gleichen Zeit:

public void progress(final int numberOfRuns) { 
    if (numberOfRuns <= 0) { 
     return; 
    } 
    new Thread(new Runnable() { 
     public void run() { 
      while (progressStatus < 100) { 
       progressStatus += 1; 
       // Update the progress bar and display the 
       //current value in the text view 
       handler.post(new Runnable() { 
        public void run() { 
         progressBar.setProgress(progressStatus); 
         textView.setText(progressStatus + "/" + progressBar.getMax()); 
         // For the UI Changes. Eg update the loop number 
         myTextView.setText(Integer.toString(totalLoop)); 
        } 
       }); 
       try { 
        // Sleep for 200 milliseconds. 
        //Just to display the progress slowly 
        Thread.sleep(100); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
      progressStatus = 0; 
      totalLoop = totalLoop+1; 
      progress(numberOfRuns - 1); 
     } 
    }).start(); 
} 

dann rufen Sie einfach progress(numberOfRuns), keine Notwendigkeit für irgendwelche Schleifen.

+0

Ich bekomme 'Variable progress Status von der inneren Klasse zugegriffen wird, muss endgültig erklärt werden. Und um es endgültig zu machen, können wir es in der at-Zeile 'progressStatus + = 1; – impossible

+0

Aww shucks, guter Fang. Ich habe 'progressStatus' in der Funktion -_- neu deklariert. Ich korrigiere den Code. Nur notieren. Ich setze den Wert von progressStatus nach jedem Durchlauf von 'progress()' zurück, so dass die while-Schleife jedes Mal von 0 - 100 läuft. –

+0

Endlich könnte ich es tun. Ich habe deine Antwort einfach mit dem UI-Thread aktualisiert. Akzeptiere die Änderungen, damit ich die Antwort annehmen kann. Danke :) – impossible