我正在尝试设置计时器并尝试了此逻辑,但是它没有运行?

时间:2018-07-01 15:21:15

标签: java android

在运行此代码时,它直接将文本设置为0,而不以1秒的间隔将其从30减少到0。

JAVA代码

public void LoadCounter() {

    for (int i = 30; i > -1; i--) {
        final int counter = i;

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                txtview.setText("" + counter);
                Log.d("test1", "" + counter);
            }
        }, 1000);


    }
}

在运行时设置值的文本视图。

XML代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:id="@+id/txtview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="30sp"
    android:textColor="#000"
    android:layout_centerInParent="true"
    android:textStyle="bold"/>
<Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/txtview"
    android:layout_centerInParent="true"
    android:text="START COUNT"
    android:textStyle="bold"
    android:textSize="20sp"/>

我知道CountdownTimer方法是一个选项,但是我正在尝试以这种方式解决 以上代码或说明中的任何更改都将受到赞赏。

这是我第一次在StackOverflow上提问,我希望这是一种正确的方式提出问题,并预先感谢您的任何帮助。

3 个答案:

答案 0 :(得分:1)

然后我们再次发明滚轮:)

  public void LoadCounter() {
                Thread timer = new Thread(){
                public void run(){
                    try{
                        for (int i = 30; i>= 0; i--){
                            sleep(1000);
                                final int timer = i;
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    txt.setText(String.valueOf(timer));
                                }
                            });
                        };
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };
            timer.start();
        }

答案 1 :(得分:0)

new CountDownTimer(30000, 1000) {

    public void onTick(long millisUntilFinished) {
        txtview.setText((millisUntilFinished / 1000) + "");
    }

    public void onFinish() {
         // todo
    }

}.start();

https://developer.android.com/reference/android/os/CountDownTimer

答案 2 :(得分:0)

我自己弄清楚了,它运行正常。

Windows Explorer or your computer