#java #android #for-loop #counter
Вопрос:
Я пытаюсь реализовать уменьшающийся счетчик, используя цикл for в Android java. Я использовал обработчик и запускаемый для задержки итерации цикла, и я хочу, чтобы счетчик начинался с 80 и заканчивался на 0, но на выходе я получаю счетчик от 0 до 80. Короче говоря, требуется обратное.
Это мой код,
TextView totalpoints = (TextView) findViewById(R.id.txttotalpoints);
Handler handler1 = new Handler();
for (int count = 80;count>=0; count--){
int finalCount = count;
handler1.postDelayed(new Runnable() {
@Override
public void run() {
totalpoints.setText("Total Points : " finalCount);
System.out.println("This is in newpointsCounter" finalCount);
}
}, 1000 * count);
}
Выходной ток => Начинается с 0 и заканчивается на 80
Требуемый вывод => Начинается с 80 и заканчивается на 0
Комментарии:
1. Действительно ли он показывает значения от 0 до 80 или только 80
2. Да, он начинается с 0 и заканчивается на 80.
3. Лучше Используйте a
CountDownTimer
.
Ответ №1:
Вы можете использовать обратный отсчет времени как:
CountDownTimer countDownTimer = new CountDownTimer(80000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
//TODO on each interval, print your count
}
@Override
public void onFinish() {
//TODO on finish of timer, you will get notified
}
};
countDownTimer.start();
Ответ №2:
Попробуйте это :
final Handler handler = new Handler();
int count = 80;
final Runnable runnable = new Runnable() {
public void run() {
totalpoints.setText("Total Points : " count);
Log.d(TAG, "count: " count);
if (count-- > 80) {
handler.postDelayed(this, 5000);
}
}
};
handler.post(runnable);
Также я бы рекомендовал использовать теги журнала, а не system.println для Android
Комментарии:
1. Тем не менее, вывод начинается с 0 и заканчивается на 80 без какой-либо задержки.
Ответ №3:
No need to use handler, Android provides CountDownTimer itself just use it.
// For Java
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
System.out.println( millisUntilFinished / 1000)
}
public void onFinish() {
//work done
}
}.start();
// For kotlin
object : CountDownTimer(30000, 1000) {
override fun onTick(millisUntilFinished: Long) {
System.out.println( millisUntilFinished / 1000)
}
override fun onFinish() {
}
}.start()