USB経由で常にデータを受信するプログラムを書いています。この値を取得して、1/4 秒ごとに更新される TextView に表示できるようにしたいと考えています。postDelayed ハンドラーを試してみましたが、値が更新されるのは、変数の変更が停止したときだけです。(私は for ループをインクリメントしてループの値を出力するだけでこれをテストしています) またThread.sleep(250)
、ループ内で使用しようとしましたが、これも機能しません。基本的に、TextView を 1/4 秒ごとに更新する方法を知りたいです。
3 に答える
USB からデータを受信する方法が必要です。TextView
このメソッドに更新するためのコードを入れます。
例えば:
public void getDataFromUsb(String data){ // or whatever it is you are getting from USB
yourTextView.setText(data);
}
TextView
このコードは、USB からデータを取得するたびに新しい値で更新されます。
Handler mUpdater = new Handler();
Runnable mUpdateView = new Runnable() {
@Override
public void run() {
tv.setText(newText);
tv.invalidate();
mUpdater.postDelayed(this, updateIntervalInMilliSeconds);
}
}
newText
これにより、更新時の内容でTextView が自動的に更新されます。ごとに更新されupdateIntervalInMilliSeconds
ます。電話mUpdateView.run()
するだけで始められます。更新を停止するには、必ず末尾に付けてくださいonPause()
。mUpdater.removeCallbacksAndMessages(null)
実行内でチェックされるブール値を設定することで停止することもできます。を呼び出して、遅延して開始することもできますmUpdater.postDelayed(mUpdateView, updateInMilliseconds);
。
いずれにせよ、postDelayed
は 1 回限りの実行であり、自動更新するには呼び出し続ける必要があります。
250 ミリ秒ごとに起動する何らかの定期的なタイマーを設定する必要があります (いくつか利用可能です)。このタイマーは (おそらく) メインの UI スレッドとは異なるスレッドで実行され、UI スレッドのみが TextView の変更を許可されているため、タイマー コールバックはrunOnUiThread(runnable);
トリガー時に呼び出されます。ランナブルがビューを更新します。