Как реализовать счетчик уменьшения в TextView.setText с помощью цикла for?

#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()