我有两节课。我试图根据用户是否单击复选框来更改布尔值。然后,根据该值是否为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方法。有谁能看到这里有什么问题?感谢
答案 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。