布尔值未在 onClickListener 上设置

Boolean value not being set upon onClickListener

我有两个 class。我正在尝试根据用户是否单击复选框来更改布尔值。然后,根据该值是否为 true/false(复选框是否被选中),我想在文本视图中显示特定文本。这是主要的Activity class:

public class BoiseActivity extends ActionBarActivity {

CheckBox cb;
public boolean isTrue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_boise);

    cb = (CheckBox) findViewById(R.id.boiseCheckBox);

    cb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            isTrue = true;
        }
    });

public boolean isTrue() {
    if (isTrue == true) {
        return true;
    }
    return false;
}

这是用户按下 "submit" 按钮后打开的新 Activity:

public class BoiseResults extends BoiseActivity {

TextView TV;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_boise_results);

    TV = (TextView) findViewById(R.id.textView1);

if (isTrue() == true) {
        TV.setText("checkbox checked");
    }
}

BoiseActivity class onCreate-> onClick 方法中的布尔值永远不会改变。谁能看出这里出了什么问题?谢谢

您的 BoiseActivity 的 onCreate{...} 方法似乎不是封闭方法。

您不需要 isTrue() 方法,因为它实际上只返回 isTrue 的值,而 isTrue 已经是一个 public 实例变量。无论细节如何,您都应该研究在活动之间传递数据的(显式)意图:http://www.vogella.com/tutorials/AndroidIntent/article.html

考虑使用 OnCheckedChangeListener;

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // DO SOMETHING HERE WHEN CHECKED/UNCHECKED
        }
});

然后您可以使用checkBox.isChecked()方法检查它是否被选中。

您最好避免对布尔值执行不必要的检查,例如;

public boolean isTrue() {
  if (isTrue == true) {
      return true;
  }
  return false;
}

以下将达到同样的效果;

public boolean isTrue(){
   return isTrue;
}

关于您的 BoiseResults Activity,如果您要从 BoiseActivity Activity 更改为 BoiseResults [=,请查看 Intents 26=] 来自您的提交,需要将数据传递给 BoiseResults。

除了你拿起一本关于 OOP 的书时所说的(来吧伙计们,每个人都从某个地方开始): BoiseActivityisTrue 实例变量将出现在它的子 class BoiseResults 中,因为它 (BoiseResults) 从 [=11] 继承 isTrue =],但它的值不会被设置,因此被解释为 false,正如 Vikram 指出的那样。

如何解决这个问题:

  • CheckBox使用onCheckedChangeListener
  • 通过 Intent 将布尔值 ('if the checkbox has been ticked') 传递给您的第二个 Activity,评论中提供了有关如何执行此操作的链接
  • 问问自己 BoiseResults 是否真的需要 subclass BoiseActivity(我不认为需要,它只是另一个 Activity
  • 摆脱你用 isTrue() 方法返回你的 isTrue 变量的值造成的所有布尔混乱
  • 为清楚起见,将 BoiseResults 重命名为 BoiseResultsActivity