使用静态变量 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;
});