Bri*_*njs 2 android view textview android-activity
我希望每5秒更新一次屏幕上的文字,我已经创建了一个计时器.但是,在第一次更新后,它永远不会再次更新该框.我假设我需要更新视图或其他东西,但我现在确定如何,任何想法?
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);
}
}
)
}
Run Code Online (Sandbox Code Playgroud)
我会使用Handler.
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);
Run Code Online (Sandbox Code Playgroud)
例如,每隔5000毫秒就会"填充".您可以通过将WHAT作为一个不同的整数传入并在handleMessage函数中处理它来使Handler对不同事件做出反应.
编辑:我通常将常量和Handler作为成员放在类中,并将onHesume()放在onResume(){}中的regularHandler.sendEmptyMessageDelayed(...)中
我也会把它放在onPause(){}
regularHandler.removeMessages(WHAT)
Run Code Online (Sandbox Code Playgroud)
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;
}
});
}
Run Code Online (Sandbox Code Playgroud)
您需要在onResume()和onPause()中执行此操作,因为如果您不将它放在onPause中,则当您的Activity不在前台时,Handler将继续循环.您将希望循环在返回前景时再次启用(因此onResume()).
| 归档时间: |
|
| 查看次数: |
2433 次 |
| 最近记录: |