【问题标题】:What is the difference in true and false in this code?这段代码中的真假有什么区别?
【发布时间】:2011-10-31 09:54:01
【问题描述】:

这段代码中真假有什么区别?

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        if (isChecked) {
            int cbcheck = 1;
        } else {
            int cbcheck = 0;
        }
    }

    @Override
    public void onClick(View v) {
        ;
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.registerbut:
            onCheckedChanged(cbagree, false);
            if (cbcheck == 1) {
                Intent intent = new Intent(this,
                    RegisterScreen2.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(intent);
            } else if (cbcheck == 0){
            }
            break;
        }
    }

上面写着 onCheckedChanged(cbagree, true); 的部分如果我改为传递 false 会发生什么?

我希望这样做,如果选中该框,则意图将运行,否则它将声明您要选中该框。我尝试保存复选框,然后使用 savepreferences 和 loadpreferences 加载它,但我发现这太麻烦了。有没有其他方法可以做到这一点?

顺便说一句,这是在android中。

【问题讨论】:

  • 据我所知,代码没有做任何事情,因为它声明了范围变量并且从不使用它们。
  • 遗憾的是,这不是我第一次看到这种垃圾代码。在许多软件公司中,编写毫无意义的代码来迷惑人们以确保他们被重新雇用是一种做法。这可能是其中一种情况。你以前外包过代码吗?还是代码最初是由其他作者编写的?
  • 这段代码是我原创的?感谢您批评我的编码,因为我一周前才开始编程。但是,我不明白您只是提出批评,而没有帮助缓解我在“编码”方面的广泛知识所遇到的问题。
  • @Drake 我不知道你在“期待”什么样的“帮助”,但毫无意义的“代码”仍然是“毫无意义的”,毫无意义的“'”标记也是如此。您的代码对“isChecked”布尔值没有任何用处,因此它的值无关紧要。

标签: java android


【解决方案1】:

正如它所写的那样,没有区别,因为您的函数 onCheckedChanged() 实际上什么都不做:在两个局部块中声明了局部变量,这些变量立即超出范围,并且该函数根本没有任何净效应。

也许您的意思是修改一些私有类成员?


建议:这是通过私有成员传递状态更改的想法:

class Thing
{
  private int cbcheck;

  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
  {
    cbcheck = isChecked ? 1 : 0;
  }

  /* ... */
}

【讨论】:

  • 如果复选框被选中,我希望意图运行。我在编辑中显示了我当前的代码,但 int 变量没有被赋予我在公共 void 中分配的值。我在问如何让公共 void 在代码中运行。
  • 好吧,我明白了。您必须将引用参数传递给onCheckedChange 并修改该参数。
  • 修改哪一个? public void onCheckedChange 还是引用参数?
  • 您必须向函数添加一个新参数(但我不知道如何 - 参见 this question,显然在 Java 中通过引用传递 int 很困难)并更改该新参数范围。但更好的是在您的班级中添加一个私人int 成员并对其进行修改!
  • 这是错误的方向 - onCheckedChanged 是接口 CompoundButton.OnCheckedChangeListener 的一部分。
【解决方案2】:

这段代码看起来有问题,onclick 检查实例(或类)变量cbcheck

if (cbcheck == 1) {

在调用onCheckedChanged 之后,但onCheckedChanged 中设置的cbcheck 是一个局部变量,因此更改无效。

也许onCheckedChanged应该是

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked) {
        cbcheck = 1;
    } else {
        cbcheck = 0;
    }
}

【讨论】:

    【解决方案3】:

    执行此操作的一个非常简单的方法是保留对您正在使用的CompoundButton 的引用并在您的onClick 方法中调用CompoundButton.isChecked

    您不应该自己调用onCheckChanged,而应该使用CompoundButton.setOnCheckedChangeListener 注册一个监听器(在这种情况下可能是cbagree.setOnCheckedChangeListener(this))。现在,当用户“选中”按钮时,isChecked 为真,当用户“取消选中”按钮时,isChecked 为假。

    但是,在这种情况下,您甚至需要注册一个监听器:

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.registerbut:
            if (cbagree.isChecked()) {
                Intent intent = new Intent(this,
                    RegisterScreen2.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(intent);
            }
            break;
        }
    }
    

    【讨论】:

    • 您介意发布您的方法的示例吗?抱歉,我一周前才开始编程,我只是在练习新的做事方法。到目前为止,我已经阅读了 2 本书,但没有一本能帮助我解决这个问题
    • 如果你想认真对待这一点,我建议在尝试使用 Android 之前先关注基本的 Java。如果你没有掌握好基础知识,很多事情会在以后咬你。
    【解决方案4】:

    Not my field 虽然在这种情况下为 true 表示“布尔 isChecked”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 2021-01-06
      • 2012-09-22
      相关资源
      最近更新 更多