使用静态变量 Android 更新时间
Updating time by using static variable Android
我正在使用菜单选项来设置游戏时间。默认情况下,时间设置为 10 秒。用户可以通过单击菜单然后选择一个选项来设置时间。我使用的是自定义视图,因此更改时间的方法与视图中的 class 不同。
当用户单击菜单选项时,会出现一个以 EditText 作为其视图的对话框。用户输入一个介于 5 和 60 之间的数字。我必须等待整个游戏周期才能更改时间,因此它 应该 在下一场游戏中更改..
但事实并非如此..
只有我再次尝试更改时间,它才会改变。
例如)
我第一次玩的时候把时间改成5秒,希望下个游戏周期改成5秒。下一个游戏周期不会变成5,会停留在之前的时间。我再次将时间更改为 30 秒。下一个游戏周期,计时器现在显示为 5 秒。如果我再把时间改成40,就会显示30。
这是我在每个 newgame() 上更改时间的地方;
static int timeRemaining = 10;
public void newGame() {
timeLeft = timeRemaining; // start the countdown
// do other stuff
这是我要求用户输入并更改变量 timeRemaining 的地方。请记住,它们处于不同的 classes。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
AlertDialog.Builder dialog;
dialog = new AlertDialog.Builder(this);
final EditText input = new EditText(this);
dialog.setTitle("Enter the time limit");
dialog.setView(input);
dialog.setPositiveButton("Done", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getInput = input.getText().toString();
try{
result = Integer.parseInt(getInput);
}catch(InputMismatchException e){
CannonView.timeRemaining = 10;
Toast.makeText((Context) getApplicationContext(), "Enter an integer", Toast.LENGTH_SHORT).show();
}
if(result < 5){
Toast.makeText((Context) getApplicationContext(), "Invalid input", Toast.LENGTH_SHORT).show();
} else if (result > 60) {
Toast.makeText((Context) getApplicationContext(), "Invalid input", Toast.LENGTH_SHORT).show();
}
Toast.makeText((Context) getApplicationContext(), "Time set changed next game", Toast.LENGTH_SHORT).show();
}
});
AlertDialog box = dialog.create();
box.show();
if(result < 5 || result > 60){
CannonView.timeRemaining = 10;
return true;
}else{
CannonView.timeRemaining = result;
return true;
}
}
return super.onOptionsItemSelected(item);
}
我在这里更改了timeRemaining,但直到我再次更改它才更新。有什么建议么?
我认为错误是您没有将以下内容放入 onClickListener
if(result < 5 || result > 60)
CannonView.timeRemaining = 10;
else CannonView.timeRemaining = result;
应该是这样的
dialog.setPositiveButton("Done", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// your original code
if(result < 5 || result > 60)
CannonView.timeRemaining = 10;
else CannonView.timeRemaining = result;
});
我正在使用菜单选项来设置游戏时间。默认情况下,时间设置为 10 秒。用户可以通过单击菜单然后选择一个选项来设置时间。我使用的是自定义视图,因此更改时间的方法与视图中的 class 不同。
当用户单击菜单选项时,会出现一个以 EditText 作为其视图的对话框。用户输入一个介于 5 和 60 之间的数字。我必须等待整个游戏周期才能更改时间,因此它 应该 在下一场游戏中更改..
但事实并非如此..
只有我再次尝试更改时间,它才会改变。
例如)
我第一次玩的时候把时间改成5秒,希望下个游戏周期改成5秒。下一个游戏周期不会变成5,会停留在之前的时间。我再次将时间更改为 30 秒。下一个游戏周期,计时器现在显示为 5 秒。如果我再把时间改成40,就会显示30。
这是我在每个 newgame() 上更改时间的地方;
static int timeRemaining = 10;
public void newGame() {
timeLeft = timeRemaining; // start the countdown
// do other stuff
这是我要求用户输入并更改变量 timeRemaining 的地方。请记住,它们处于不同的 classes。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
AlertDialog.Builder dialog;
dialog = new AlertDialog.Builder(this);
final EditText input = new EditText(this);
dialog.setTitle("Enter the time limit");
dialog.setView(input);
dialog.setPositiveButton("Done", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getInput = input.getText().toString();
try{
result = Integer.parseInt(getInput);
}catch(InputMismatchException e){
CannonView.timeRemaining = 10;
Toast.makeText((Context) getApplicationContext(), "Enter an integer", Toast.LENGTH_SHORT).show();
}
if(result < 5){
Toast.makeText((Context) getApplicationContext(), "Invalid input", Toast.LENGTH_SHORT).show();
} else if (result > 60) {
Toast.makeText((Context) getApplicationContext(), "Invalid input", Toast.LENGTH_SHORT).show();
}
Toast.makeText((Context) getApplicationContext(), "Time set changed next game", Toast.LENGTH_SHORT).show();
}
});
AlertDialog box = dialog.create();
box.show();
if(result < 5 || result > 60){
CannonView.timeRemaining = 10;
return true;
}else{
CannonView.timeRemaining = result;
return true;
}
}
return super.onOptionsItemSelected(item);
}
我在这里更改了timeRemaining,但直到我再次更改它才更新。有什么建议么?
我认为错误是您没有将以下内容放入 onClickListener
if(result < 5 || result > 60)
CannonView.timeRemaining = 10;
else CannonView.timeRemaining = result;
应该是这样的
dialog.setPositiveButton("Done", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// your original code
if(result < 5 || result > 60)
CannonView.timeRemaining = 10;
else CannonView.timeRemaining = result;
});