所以我意识到这个问题已经被问了很多,但我无法以我能够的方式应用任何其他问题。基本上我在使用Java中的全局对象时遇到了麻烦,因为我的大多数经验都是在Python中。
以下是我的代码。基本上checkbox1是我想要的地方,但我不知道如何让我的两种方法认识到它就在那里。我可以通过在resetAll和doMath中定义checkbox1来解决这个问题,但我相信有更好的解决方法
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
}
答案 0 :(得分:1)
<强>问题:强>
CheckBox checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
在充气或设置活动的contentView之前,您只能initialized
View
,否则您将获得NPE。
<强>溶液强>
创建一个你已经做过的全局变量但是先不要初始化它。
CheckBox checkbox1;
在onCreate
的{{1}}方法中,您在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
字段
答案 1 :(得分:0)
如果您的意思是希望在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
。这就是你想要的吗?