Обновлять TextView каждые N секунд?
Я был очень смущен этим недавно и не могу найти ответ нигде.
При программировании для Android, я хочу обновлять текстовое представление каждые 10 секунд, но как мне это сделать? Я видел, как некоторые примеры используют "Run()" и "Update()", но, кажется, это не помогает, когда я пытаюсь это сделать, есть идеи?
Прямо сейчас у меня есть:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.slideshow);
CONST_TIME = (int) System.currentTimeMillis();
Resources res = getResources();
myString = res.getStringArray(R.array.myArray);
}
public void checkTime(View V){
TextView text = (TextView) findViewById(R.id.fadequote);
CUR_TIME = (int) System.currentTimeMillis();
text.setText(""+(int) (CUR_TIME-CONST_TIME));//Debugs how much time has gone by
if(CUR_TIME-CONST_TIME>10000){
getNextQuote(null); //A function that gets a random quote
CONST_TIME = CUR_TIME;
}
}
Я предполагаю, что я ДЕЙСТВИТЕЛЬНО спрашиваю, как я могу заставить checkTime() повторять его бесконечно, пока не вызывается onPause()?
5 ответов
Как насчет использования таймера?
private Timer timer = new Timer();
private TimerTask timerTask;
timerTask = new TimerTask() {
@Override
public void run() {
//refresh your textview
}
};
timer.schedule(timerTask, 0, 10000);
Отмените это через timer.cancel(). В вашем методе run() вы можете использовать runOnUiThread();
ОБНОВИТЬ:
У меня есть приложение livescoring, которое использует этот таймер для обновления каждые 30 секунд. Это выглядит так:
private Timer timer;
private TimerTask timerTask;
public void onPause(){
super.onPause();
timer.cancel();
}
public void onResume(){
super.onResume();
try {
timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
//Download file here and refresh
}
};
timer.schedule(timerTask, 30000, 30000);
} catch (IllegalStateException e){
android.util.Log.i("Damn", "resume error");
}
}
Вместо того, чтобы возиться с фоновым потоком, а затем runOnUiThread()
использовать postDelayed()
, доступно на любом View
, чтобы запланировать Runnable
, Тот Runnable
можете обновить ваш TextView
и затем запланируйте себя для следующего прохода. Использование фонового потока для наблюдения за временем - пустая трата времени.
Я согласен с ответом Wired00, но, пожалуйста, следуйте этому порядку:
//update current time view after every 1 seconds
final Handler handler=new Handler();
final Runnable updateTask=new Runnable() {
@Override
public void run() {
updateCurrentTime();
handler.postDelayed(this,1000);
}
};
handler.postDelayed(updateTask,1000);
Если это помогает кому-то вот пример кода с помощью postDelayed()
...
private Handler mHandler = new Handler();
...
// call updateTask after 10seconds
mHandler.postDelayed(updateTask, 10000);
...
private Runnable updateTask = new Runnable () {
public void run() {
Log.d(getString(R.string.app_name) + " ChatList.updateTask()",
"updateTask run!");
// run any code here...
// queue the task to run again in 15 seconds...
mHandler.postDelayed(updateTask, 15000);
}
};