0

USB経由で常にデータを受信するプログラムを書いています。この値を取得して、1/4 秒ごとに更新される TextView に表示できるようにしたいと考えています。postDelayed ハンドラーを試してみましたが、値が更新されるのは、変数の変更が停止したときだけです。(私は for ループをインクリメントしてループの値を出力するだけでこれをテストしています) またThread.sleep(250)、ループ内で使用しようとしましたが、これも機能しません。基本的に、TextView を 1/4 秒ごとに更新する方法を知りたいです。

4

3 に答える 3

0

USB からデータを受信する方法が必要です。TextViewこのメソッドに更新するためのコードを入れます。

例えば:

public void getDataFromUsb(String data){ // or whatever it is you are getting from USB

yourTextView.setText(data);

}

TextViewこのコードは、USB からデータを取得するたびに新しい値で更新されます。

于 2012-09-06T20:23:42.087 に答える
0
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 回限りの実行であり、自動更新するには呼び出し続ける必要があります。

于 2012-09-06T17:53:07.687 に答える
0

250 ミリ秒ごとに起動する何らかの定期的なタイマーを設定する必要があります (いくつか利用可能です)。このタイマーは (おそらく) メインの UI スレッドとは異なるスレッドで実行され、UI スレッドのみが TextView の変更を許可されているため、タイマー コールバックはrunOnUiThread(runnable);トリガー時に呼び出されます。ランナブルがビューを更新します。

于 2012-09-06T17:43:53.663 に答える