布尔值未在 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 的书时所说的(来吧伙计们,每个人都从某个地方开始):
BoiseActivity
的 isTrue
实例变量将出现在它的子 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
我有两个 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 的书时所说的(来吧伙计们,每个人都从某个地方开始):
BoiseActivity
的 isTrue
实例变量将出现在它的子 class BoiseResults
中,因为它 (BoiseResults
) 从 [=11] 继承 isTrue
=],但它的值不会被设置,因此被解释为 false,正如 Vikram 指出的那样。
如何解决这个问题:
- 对
CheckBox
使用onCheckedChangeListener
- 通过
Intent
将布尔值 ('if the checkbox has been ticked') 传递给您的第二个Activity
,评论中提供了有关如何执行此操作的链接 - 问问自己
BoiseResults
是否真的需要 subclassBoiseActivity
(我不认为需要,它只是另一个Activity
) - 摆脱你用
isTrue()
方法返回你的isTrue
变量的值造成的所有布尔混乱 - 为清楚起见,将
BoiseResults
重命名为BoiseResultsActivity