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