【问题标题】:Action Performed when Button Clicked n Times单击按钮 n 次时执行的操作
【发布时间】:2013-05-20 14:47:53
【问题描述】:
public void boss(final Boss boss) {
    forward.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            boss.setHp(boss.getHp() - 1);
            log("" + boss.getHp());
        }
    });
    if(boss.getHp() > 0){
        boss(boss);
    }
}

所以,在上面的代码中,我试图让 bossHp 每次点击前进时都减少 1。代码存在 stackoverflow 错误。 (它只是在无限循环中调用 boss()。)我怎样才能让它在每次用户向前点击时将 bossHp 减少 1,然后在 bossHp

注意:其他地方也使用了前进按钮。

谢谢!

编辑:很抱歉之前的那个错字!显示的代码现在是正确的代码。有任何想法吗?谢谢!

澄清:

我想要发生的事情是每次单击按钮前进时都会检查 bossHp 直到 bossHp

【问题讨论】:

  • 您看到的是点击处理程序中的无限循环还是boss函数本身?两者都没有直接的无限循环,但它可能有 boss.getHp、boss.setHp 或 bossCombat。不过,我们需要他们检查的代码。
  • 这段代码不错。但我相信你在bossCombat(boss) 中调用boss() 会导致inf 循环
  • bossCombat()的邮政编码
  • 在大多数情况下,setOnClickListener(listener) 应该只调用一次。
  • 同意@AudriusK,您需要发布堆栈跟踪以便我们确定。如果您张贴列出堆栈跟踪的前 10 行,这很可能就足够了......我们/您需要在堆栈跟踪中寻找重复模式。

标签: android listener stack-overflow onclicklistener


【解决方案1】:

这应该可行。此外,您不必将 boss 作为函数参数传递。您可以将该对象作为字段保留在您的类中。

public void boss(final Boss boss) {
    forward.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if(boss.getHp() > 0){
                boss.setHp(boss.getHp() - 1);
                log("" + boss.getHp());
            } else {
                //boss is dead
            }
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多