2016-06-22 12 views
0

これはつまり、メソッドの新しい声()した後、5〜10秒後に私のコード更新TextViewには、瞬時に

try { 
final double calcResult = CalcUtils.evaluate(textViewOutputScreen.getText().toString()); 

textViewOutputScreen.setText(Double.toString(calcResult)); //setting text to text view 

new voices().voice(calcResult); //this method takes about 5-10 seconds to execute 

} catch (Exception e) { 
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
        textViewOutputScreen.setText("0"); 
} 
私は2行目に TextViewに設定されたテキストが画面に更新されて

です。声( calcResult);終了しました。

私は法の前に、テキストビューをリフレッシュする方法

  try { 
       Thread.sleep(700); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

でこのようないくつかの遅れを保ったが、私はそれを行うことができますどのように呼ばれているのですか?

私は同様の質問を検索しましたが、どれも私のために働いていませんでした。

答えて

0

は無効にしてくださいあなたが試みることができることdoen't仕事は重いLOAを入れた場合new voices().voice(calcResult);

textViewOutputScreen.invalidate(); 

を実行する前に、ビューd on a AsyncTask

これはバックグラウンドで実行され、Javaスレッドに基づいています。あなたは、あなただけのAsyncTaskを作成し、パラメータとそれを実行

[Link to AsyncTask examples]

private class VoiceTask extends AsyncTask<Double, Void, Void> { 
    protected void doInBackground(Double... stuff) { 
     //Do whatever voice does! 
     double calcResult = stuff[0]; 
     new voices().voice(calcResult); 


    } 

    protected void onPostExecute(Long result) { 
     //Is called when you are done, if you want to send stuff here 
     //you need to change this example, see the link below 
     //Not necessary to override (If I remember correctly) 
    } 
} 
class/ Activity

現在のあなたの中に入れ子になったクラスとして AsyncTaskを追加することができます。値は doInBackgroundで利用可能になります。

try { 
     final double calcResult = CalcUtils.evaluate(textViewOutputScreen.getText().toString()); 

       textViewOutputScreen.setText(Double.toString(calcResult)); //setting text to text view 
       new VoiceTask().execute(calcResult); //CHANGED LINE 

      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
       textViewOutputScreen.setText("0"); 
      } 
+0

おかげで動作していない、無効にしようとしたが、それでも – Redman

+1

を働いていません。バックグラウンドスレッドに 'new voices()。voice(calcResult);を入れてみてください。 Proのヒントが 'AsyncTask'をチェックしています。と背景の重いものをやって – Mazze

+0

は魅力のように働いた、ありがとう – Redman

0

それはあなたがmainスレッドでコードを実行されているように思える、とTextView.setText(...)event queueの最後に配置GETとnew Voices().voice()が実行を完了した後に、したがって、それはのは、更新されます。あなたは以下のことでUI ThreadからTextViewをアップデートしよう

YourActivity.this.runOnUiThread(new Runnable() { 
    public void run() { 
     textViewOutputScreen.setText(Double.toString(calcResult)); 
    } 
}); 

非常に良くソリューションはもちろん、バックグラウンドで実行時間の長いタスクを実行することです...

+0

その後、あなたはロバートが言っていること試してみてください迅速な応答のためのおかげで、これを試してみましたが、その返事はまだのための – Redman

関連する問題