2017-02-22 1 views
-1

Ich habe eine button in meinem activity. Wenn ich es drücke, wird folgende Methode "ProcessNumbers()" aufgerufen. Ich brauche die Funktionalität, die „Processing ...“ Text sollte dann in dem textview zuerst angezeigt werden, die loop verarbeitet bekommen sollte, und wenn die loop endet nach 2-3 Sekunden, die textview„Processed“ Text anzeigen soll . Aber das passiert nicht. Wenn ich den button klicke, läuft loop zuerst und nach 2-3 Sekunden, textview enthält "verarbeitet". Warum der erste Schritt fehlt Wo textview sollte "Processing ..." enthalten?Android - TextView Zuordnung funktioniert nicht wie erwartet

private void ProcessNumbers() 
{ 
     TextView textViewProcessNumbers = (TextView) findViewById(R.id.textViewProcessNumbers); 
     textViewProcessNumbers.setText("Processing..."); 

     int k = 0; 
     for (long i = 0; i <= 1000000000; i++) 
     { 
       k = 1; 
     } 

     textViewProcessNumbers.setText("Processed..."); 
} 

Fehle ich hier etwas?

+0

Statt zur Verwendung Timertask-Schleife. – SachinSarawgi

+0

Überprüfen Sie meine Antwort unter –

Antwort

0
private void ProcessNumbers() 
{ 
    TextView textViewProcessNumbers = (TextView) findViewById(R.id.textViewProcessNumbers); 
    textViewProcessNumbers.setText("Processing..."); 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //Do something after 30000ms 
      textViewProcessNumbers.setText("Processed..."); 
     } 
    }, 30000); 
} 

Verwenden Sie den Handler für die Verzögerung. Hoffe, es hilft

+0

Sie können leicht die Zeit von 30000 mit was auch immer Sie wollen ändern. diese 30000 ist in Millisekunde –

+0

Danke für Ihre Lösung. Es funktioniert. FOR LOOP Ich laufe in dem obigen Codebeispiel ist nur eine Illustration, die einige Geschäftslogik ausgeführt wird. Wenn diese Geschäftslogik beendet ist, sollte die Textansicht mit dem Text "Verarbeitet" aktualisiert werden. Also, ich denke Post Delayed wird nicht für mich arbeiten. Ich denke, dass der von "PIOTR ZAWADZKI" vorgeschlagene Hintergrundthread am besten zu mir passt. – Daniel

+0

Ja, Sie können AsycTask verwenden, aber Sie erwähnen das nicht in Ihrer Frage. Also habe ich gerade Verspätung Code –

0

Sie müssen diesen Prozess zu einem Hintergrund Thread z. Verwenden einer AsyncTask, da Textview nicht aktualisiert wird, bis Sie den Hauptthread verlassen. Das Ausführen lang andauernder Operationen auf dem Benutzeroberflächenthread wird ebenfalls nicht empfohlen und es kann dazu führen, dass ein Dialogfeld "Anwendung reagiert nicht" angezeigt wird.

So 1. das Etikett zu Verarbeitungssatz ... 2. Starten Sie den AsyncTask mit Ihrem Prozess 2. Wenn AsyncTask Update das Etikett in OnPostExecute beendet

+0

Vielen Dank für Ihre Lösung. Können Sie mir bitte ein Beispiel für AsyncTask-Hintergrundthread geben? Das wäre wirklich sehr hilfreich. – Daniel

+0

Sicher, Sie könnten das Nutzungsbeispiel hier überprüfen: https://developer.android.com/reference/android/os/AsyncTask.html –

+0

Danke für den Link. – Daniel

0

Sie CountDownTimer verwenden können, nach Textansicht add finden dieser Code.

new CountDownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 
     textViewProcessNumbers.setText("Processing..."); 
    } 

    public void onFinish() { 
     textViewProcessNumbers.setText("Processed..."); 
    } 
    }.start(); 

CountDownTimer (long millisInFuture, lang countDownInterval)

Verwandte Themen