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