2017-02-22 9 views
-1

activitybuttonがあります。それを押すと、メソッド "ProcessNumbers()"が呼び出されます。私は「の処理は...」テキストはtextviewまず、2-3秒後loop終了すると、textviewを示すべきときにloopが処理されるはずです、そして「加工」テキストで表示されなければならない機能を必要とします。しかし、これは起こっていない。 buttonをクリックすると、loopが最初に実行されてから2〜3秒後に、textviewに「処理済み」が含まれます。 textviewに「」が含まれている必要がある最初の手順がない理由「処理中...」Android - TextViewの割り当てが正常に動作しない

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..."); 
} 

ここに何か不足していますか?

+0

。 – SachinSarawgi

+0

私の答えを確認してください –

答えて

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); 
} 

遅延のハンドラを使用します。役立つことを願っています。

+0

あなたは簡単に30000からあなたが欲しいものと時間を変更することができます。この30000はミリ秒単位です –

+0

あなたのソリューションに感謝します。それは働いている。ループのために私は上記のコードサンプルで実行していますが、いくつかのビジネスロジックが実行されているというイラストだけです。そのビジネスロジックが終了すると、テキストビューは「処理済」テキストで更新されます。だから、私はpostDelayedが私のために働かないと思う。私は "PIOTR ZAWADZKI"によって提案されたバックグラウンドスレッドが私に最も適していると思う。 – Daniel

+0

はい、あなたはAsycTaskを使うことができますが、あなたの質問には言及しません。だから私は遅れのコードを投稿しました –

0

このプロセスをバックグラウンドスレッドに移動する必要があります。 AsyncTaskを使用すると、メインスレッドを離れるまでテキストビューが更新されないためです。 UIスレッドで長時間実行される操作を実行することもお勧めしません。アプリケーションが応答しないというダイアログが表示されることがあります。あなたのプロセスと

ので 1.処理にラベルを設定し... 2. [スタートAsyncTask 2. AsyncTaskはonPostExecute

+0

おかげであなたの解決のおかげで幸せ。 AsyncTaskバックグラウンドスレッドの例を教えてください。それは本当に非常に役立つだろう。 – Daniel

+0

確かに、使用例をここでチェックすることができます:https://developer.android.com/reference/android/os/AsyncTask.html –

+0

リンクありがとうございます。 – Daniel

0

でラベルの更新を終了するとあなたはテキストビューのアドオンを見つけた後、CountDownTimerを使用することができますこのコード。

new CountDownTimer(30000, 1000) { 

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

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

CountDownTimer(長いmillisInFuture、長いcountDownInterval)の代わりに、ループの使用TimerTaskをのための

関連する問題