Android 使用动态文本更新UI
我希望每5秒钟更新一次屏幕上的文本,我已经创建了一个计时器来完成这项工作。但是,在第一次更新之后,它将不再更新该框。我假设我需要刷新视图或其他东西,但我现在确定如何更新,有什么想法吗Android 使用动态文本更新UI,android,view,android-activity,textview,Android,View,Android Activity,Textview,我希望每5秒钟更新一次屏幕上的文本,我已经创建了一个计时器来完成这项工作。但是,在第一次更新之后,它将不再更新该框。我假设我需要刷新视图或其他东西,但我现在确定如何更新,有什么想法吗 public class HomeActivity extends Activity implements OnClickListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst
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毫秒“做一些事情”。您可以通过传入不同的整数并在handleMessage函数中处理,使处理程序对不同的事件作出反应
编辑:我通常将常量和处理程序作为成员放置在类中,并将regularHandler.sendEmptyMessageDelayed(…)放置在onResume(){}
我还要把它放在onPause(){}
编辑2:示例:
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中,当您的活动不在前台时,处理程序将继续循环。当循环返回前台时,您会希望它再次启用(因此onResume())。使用处理程序是一个不错的策略,但实际上并不需要自定义回调。相反,您可以将
postDelayed
与Runnable
一起使用。有关实现的详细信息,请参见本文
runOnUiThread(new Runnable() {
public void run() {
textTitle.setText(title);
}
});
无法从后台线程更新UI。每当你想修改UI时,建议使用UI线程你能举一个小例子说明我如何将其与计时器集成,它们几乎是无缝冲突完全删除计时器,这就是处理程序的用途。文本是否会在应用程序的整个生命周期内每5秒更新一次?或者仅仅5秒一分钟(例如)?首先删除线程。睡眠然后它应该工作。。。但这取决于你如何设置标题和艺术家字段。。。。编辑:是的,Rawr是对的,每5秒做一次会杀死电池
runOnUiThread(new Runnable() {
public void run() {
textTitle.setText(title);
}
});