【问题标题】:Game start, reset and quit button conundrum游戏开始、重置和退出按钮难题
【发布时间】:2016-10-23 10:56:26
【问题描述】:

我正在开发一个小应用程序,我一直在做最后的润色,但遇到了一个我似乎无法解决的逻辑问题。

我有一个函数:

public void quitOrStartGame(View view){
    Button quitStart = (Button)findViewById(R.id.quit_startButton);
    Button reset = (Button)findViewById(R.id.resetButton);
    reset.setClickable(false);

    if (quitStart.getText() == "Quit") {
        gridGame.quit();
        importGrid();
        quitStart.setText("Start");
        reset.setClickable(false);
        } 
    else {
        gridGame.startGame();
        importGrid();
        quitStart.setText("Quit");
        reset.setClickable(true);
    }
}

这是为了启动我的游戏而设计的。这是一个 5x5 的游戏,有 x 和 o 的作业,对于我的问题来说,作业的意义并不重要。

我想要完成的是,当您第一次打开应用程序时,您会看到两个按钮,一个是重置按钮,一个是启动按钮。当您按下开始时,它开始游戏,按钮变为退出按钮,这将停止游戏运行。

问题是,我不希望在按下开始按钮之前可以点击重置按钮,目前这不会发生。甚至在按下启动之前,重置按钮都会发挥其正常功能。

但是: 当您按下开始,然后最终退出时,这确实会禁用重置按钮,但该过程必须首先发生。我想要的是在按下开始之前禁用重置按钮,然后在按下退出后的一段时间内再次禁用。

我希望我能很好地解释这个问题,提前感谢各位好心人提供的任何帮助!

【问题讨论】:

  • 没有阅读整个问题,但关于if (quitStart.getText() == "Quit") { 看看:How do I compare strings in Java?
  • 无论出于何种原因在 android studio 中这行得通,我知道我也认为这很奇怪,但如果你不介意你能阅读实际的问题吗?如果不是,请不要评论说“我没有阅读您的要求,但您在这里错了”的帖子。这对任何人都没有帮助。
  • 我不是安卓开发者。我什至没有安装它,所以我怀疑我能否快速发现您的问题。 == "..." 是 Java 中的标准代码气味,所以我指出了这一点。如果您比较像"foo" == "foo" 这样的字符串文字,它可能会起作用,因为它们存储在字符串池中。我假设 getText() 返回 new String(...) 所以通过 == 比较它不应该工作,除非该方法也在池中实习返回的字符串。
  • 再一次,不是问题,它正在工作。感谢您的“回答”,但这无助于解决实际问题。老实说,这个问题并不真正取决于android知识,但是你又没读过它,你怎么知道?

标签: java android button logic reset


【解决方案1】:

据我了解您的问题,您希望重置按钮在程序开始时不可点击。有两种存档方式:

  1. 您在初始化方法(在程序开始时调用的方法)中调用 reset.setClickable(false);。例如在类构造函数中。

  2. 您将重置按钮的样式更改为禁用可点击。您在 XML 布局中将 android:clickable 设置为 false

【讨论】:

  • 是的,这就是我开始的方式。自从我发布以来,我在这段时间里发现的是这部分:
  • if (quitStart.getText() == "Quit") { gridGame.quit();导入网格(); quitStart.setText("开始");重置.setClickable(false); }
  • 我将它设置为不可点击,但在 else 语句中,它首先运行它被设置为可点击,而不检查是否先点击了开始按钮
【解决方案2】:

我没有完整的代码,所以我不能确定你什么时候打电话:

quitOrStartGame(View view)

但您需要做的就是在开始/退出按钮 onClickLisetner 上切换重启按钮的可点击性

   quitStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (quitStart.getText() == "Quit") {
                gridGame.quit();
                importGrid();
                quitStart.setText("Start");
                reset.setClickable(false);
            }
            else {
                gridGame.startGame();
                importGrid();
                quitStart.setText("Quit");
                reset.setClickable(true);
            }
        }
    });

您还应该将 findViewById 移动到只调用一次的位置。像 OnCreate 方法。并将按钮保存为全局参数。 https://groups.google.com/forum/#!topic/android-developers/_22Z90dshoM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多