未在onClickListener上设置布尔值

时间:2015-03-10 23:07:40

标签: java android textview onclicklistener

我有两节课。我试图根据用户是否单击复选框来更改布尔值。然后,根据该值是否为true / false(是否选中了复选框),我想在textview中显示特定文本。这是MainActivity类:

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;
}

以下是用户按下“提交”按钮后打开的新活动:

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类中的布尔值永远不会改变onCreate-> onClick方法。有谁能看到这里有什么问题?感谢

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

除了你在OOP上找到一本关于OOP的书时所说的话(来吧,每个人都在某处开始): isTrue的{​​{1}}实例变量将出现在其子类BoiseActivity中,因为它(BoiseResults)从BoiseResults继承isTrue,但正如维克拉姆指出的那样,它的价值不会被设定,因此也被解释为假。

如何理顺这一点:

  • BoiseActivity用于onCheckedChangeListener
  • 通过您正在启动它的CheckBox将布尔值(如果勾选了复选框')传递给您的第二个Activity,在评论中给出了如何执行此操作的链接
  • 问问自己Intent是否真的需要继承BoiseResults(我不认为它是,它只是另一个BoiseActivity
  • 摆脱使用Activity方法创建的所有布尔混乱,返回isTrue()变量的值
  • 为了清晰起见,将isTrue重命名为BoiseResults

答案 2 :(得分:1)

考虑使用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活动,如果您要从提交中将BoiseActivity活动更改为BoiseResults活动并需要将数据传递给BoiseResults,请查看Intents。

相关问题