因此,我意识到这个问题已经被问了很多,但是我无法以我能够解决的方式将其他任何问题应用到我的情况中。基本上,我在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
    }

最佳答案

问题:

CheckBox checkbox1 = (CheckBox)findViewById(R.id.checkBox1);


在为活动充气或设置contentView之前,您不能仅initialized一个View,否则将获得NPE。

解:

创建一个已经完成但未首先初始化的全局变量。

 CheckBox checkbox1;


onCreateActionBarActivity方法中,然后在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类中即可

07-27 13:38