我希望每 5 秒更新一次屏幕上的文本,为此我创建了一个计时器。然而,在第一次更新之后,它再也不会更新盒子了。我假设我需要刷新 View 或其他东西,但我现在确定如何,有什么想法吗?
public class HomeActivity extends Activity implements OnClickListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textTitle = (TextView) findViewById(R.id.textTitle);
textArtist = (TextView) findViewById(R.id.textArtist);
timedMeta();
}
static void timedMeta()
{
timer.scheduleAtFixedRate(
new TimerTask() {
public void run() {
try{
textTitle.setText(title);
textArtist.setText(artist);
}
Thread.sleep(UPDATE_INTERVAL);
catch (Exception e)
{
},
DELAY_INTERVAL,
UPDATE_INTERVAL);
}
}
)
}
最佳答案
我会使用处理程序。
private static final int WHAT = 1;
private static final int TIME_TO_WAIT = 5000;
Handler regularHandler = new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
// Do stuff
regularHandler.sendEmptyMessageDelayed(msg.what, TIME_TO_WAIT);
return true;
}
});
regularHandler.sendEmptyMessageDelayed(WHAT, TIME_TO_WAIT);
例如,每 5000 毫秒“执行一次操作”。您可以通过将 WHAT 作为不同的整数传递并在 handleMessage 函数中处理它来使处理程序对不同的事件使用react。
编辑:我通常会将常量和处理程序作为成员放在类中,并将 regularHandler.sendEmptyMessageDelayed(...) 放在 onResume() 中{}
我也会把它放在 onPause() 中{}
regularHandler.removeMessages(WHAT)
Edit2:示例:
public class HomeActivity extends Activity implements OnClickListener {
private static final int WHAT = 1;
private static final int TIME_TO_WAIT = 5000;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textTitle = (TextView) findViewById(R.id.textTitle);
textArtist = (TextView) findViewById(R.id.textArtist);
}
@Override
public void onResume() {
super.onResume();
regularHandler.sendEmptyMessageDelayed(WHAT, TIME_TO_WAIT);
}
@Override
public void onPause() {
super.onPause();
regularHandler.removeMessages(WHAT);
}
Handler regularHandler = new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
// Do stuff
regularHandler.sendEmptyMessageDelayed(msg.what, TIME_TO_WAIT);
return true;
}
});
}
您需要在 onResume() 和 onPause() 中执行此操作,因为如果您不将其放在 onPause 中,则当您的 Activity 不在前台时,Handler 将继续循环。当循环回到前台时,您会希望循环再次启用(因此 onResume())。
关于android - 使用动态文本更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9539416/