当我单击按钮时,我的应用程序崩溃了,我也不知道为什么。我已经查询了很多次代码,但似乎找不到任何“重大缺陷”。该应用程序的目的是尽可能快地单击按钮两次,它显示从第一次点击到第二次点击所需的时间。某种反应的东西。我使用了计时器,因为我不知道还要使用什么。
(开始时间的值)-(当前计时器的值)=(第一次单击和第二次单击之间的时间)。

    <?xml version="1.0" encoding="utf-8"?>

<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"
    android:background="#000000"
    tools:context="com.keklabs.reactiontimer.MainActivity">


    <TextView
        android:id="@+id/scoreText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="78dp"
        android:text="Click below to start!"
        android:textColor="#39FF14"
        android:textSize="30dp" />

    <Button
        android:id="@+id/startStopButton"
        android:layout_width="match_parent"
        android:layout_height="350dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="#000000"
        android:text="Start / Stop"
        android:textSize="25dp"
        android:textColor="#39FF14" />

</RelativeLayout>
public class MainActivity extends AppCompatActivity {

    private final long startTime = 0;
    private final long interval = 100;
    private boolean buttonClicked;
    private Button startStopButton;
    private TextView scoreText;

    CountDownTimer timer = new CountDownTimer(30000, 100) {

        @Override
        public void onTick(long millisUntilFinished) {
            scoreText.setText("kek"); //displayed text is value of starttime (30000) - current value of timer,
        }                             //some sort of reaction game thing

        @Override
        public void onFinish() {
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView scoreText = (TextView) findViewById(R.id.scoreText);
        Button startStopButton = (Button) findViewById(R.id.startStopButton);


        startStopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!buttonClicked) {
                    timer.start();
                    buttonClicked = true;
                }
                else {
                    timer.cancel();
                    buttonClicked = false;
                }
            }
        });

    }

}

编辑

如何在scoreText.setText(startTime - millisUntilFinished);行中正确显示startTime-current计时器值?

CountDownTimer计时器=新的CountDownTimer(startTime,interval){
    @Override
    public void onTick(long millisUntilFinished) {
        scoreText.setText(startTime - millisUntilFinished);
    }

    @Override
    public void onFinish() {
    }
};

最佳答案

实际上,您两次声明了TextView scoreText。一个在全局范围内,另一个在本地。您可以将TextView scoreText = (TextView) findViewById(R.id.scoreText);替换为scoreText = (TextView) findViewById(R.id.scoreText);在你的onCreate()中

07-26 07:10