0

我正在编写一个程序,它将通过 USB 不断接收数据。我希望能够获取此值并将其显示在每季度更新一次的 TextView 中。我已经尝试过 postDelayed 处理程序,但是只有在我的变量停止更改后,该值才会更新。(我一直在用一个递增的 for 循环和输出循环的值来测试这个)我也尝试过Thread.sleep(250)在我的循环内部使用,但这也不起作用。所以基本上我想知道如何每季度更新一次 TextView 。

4

3 回答 3

0

您需要设置某种定期计时器(有几个可用),每 250 毫秒触发一次。由于此计时器将(可能)在与您的主 UI 线程不同的线程中运行,并且由于仅允许 UI 线程修改您的 TextView,因此您的计时器回调将runOnUiThread(runnable);在触发时调用。您的可运行文件将更新视图。

于 2012-09-06T17:43:53.663 回答
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);
 }
}

这将使用更新时的任何内容自动更新 TextView newText。它将更新每个updateIntervalInMilliSeconds. 只需调用mUpdateView.run()即可开始。确保以 结束它onPause()mUpdater.removeCallbacksAndMessages(null)停止更新。

您还可以通过设置在运行中检查的布尔值来停止它。您也可以通过调用延迟启动它mUpdater.postDelayed(mUpdateView, updateInMilliseconds);

无论哪种方式,postDelayed都是一次性执行,您必须不断调用它才能自动更新。

于 2012-09-06T17:53:07.687 回答