所以我意识到,这个问题被问了很多次,但我无法以一种我能够做到的方式将其他任何问题应用到我的情况中。基本上,我在Java中遇到了全局对象的问题,因为我大部分的经验都是在Python中。
下面是我的密码。基本来说,checkbox1是我希望它出现的地方,但我不知道如何让我的两种方法认识到它就在那里。我可以通过在checkbox1和resetAll中定义doMath来解决这个问题,但是我相信还有更好的解决方法。
public class MainActivity extends ActionBarActivity {
// right here is where I want my objects so that both resetAll and doMath can use them
CheckBox checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
public void resetAll(View view){
// do stuff with checkbox1
}
public void doMath(View view){
// do stuff with checkbox1
}
发布于 2014-07-27 19:48:07
问题:
CheckBox checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
在充气或设置活动的initialized
之前,不能仅仅使用View
,否则就会得到NPE。
解决方案:
创建一个您已经做过的全局变量,但不要先初始化它。
CheckBox checkbox1;
在onCreate
方法的ActionBarActivity
中,然后在setContentView(R.layout.your_layout_for_the_checkbox);
之后初始化它
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.internal_main);
checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
}
完成之后,可以在这两个方法中调用checkbox1
字段,只要该方法在MainActivity
类中
发布于 2014-07-27 19:50:39
如果您的意思是希望它在整个MainActivity
中都是可访问的,则需要将该复选框声明为成员:
public class YourActivity extends Activity{
private CheckBox mCheckBoxOne;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activty_your);
mCheckBoxOne = (CheckBox)findViewById(R.id.checkBox1);
}
public void resetAll(View view){
mCheckBoxOne.setChecked(!mCheckBoxOne.isChecked());
}
public void doMath(View view){
mCheckBoxOne.setChecked(!mCheckBoxOne.isChecked());
}
}
如果希望从其他地方访问它,则需要将上下文转换为MainActivity
或使用interface
。这就是你想要的吗?
https://stackoverflow.com/questions/24988109
复制相似问题