如何在Java中使CheckBox / EditText对象全局化

时间:2014-07-28 03:39:37

标签: java android object global

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

2 个答案:

答案 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。这就是你想要的吗?