当我尝试在全局范围内初始化Button和EditText对象时,我得到空指针异常,无法弄明白。除了应用程序显示我的布局之外,我已经注释掉了所有内容,但这仍然会导致崩溃:
private EditText addmoney = (EditText)findViewById(R.id.addmoney);
R.id.addmoney绝对肯定存在。那到底是什么?是否无法在全局范围内声明EditText?我需要能够在扩展Activity的类中从onCreate和onPause中调用它,是否有其他方法可以做到这一点?
编辑:
我尝试使用shade的方法首先对布局进行膨胀,但是它会导致错误,显然在调用onCreate()之前不允许使用系统服务,并且膨胀视图需要一个。
答案 0 :(得分:3)
只有在为当前活动设置了内容后,才必须执行findViewById
。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
addmoney = (EditText)findViewById(R.id.addmoney);//it knows in which file to search for the id
}
答案 1 :(得分:2)
或者,您可以这样做:
private View dummy = (View) View.inflate(this, R.layout.dummy, null);
private EditText addmoney = (EditText) dummy.findViewById(R.id.addmoney);
...并在onCreate(或其他任何地方):
setContentView (dummy);
由于您已经实例化了EditText视图的父级,因此您可以在没有NPE的情况下引用它。
注意: inflate 的第一个参数是上下文。因此,您需要一个有效的上下文才能工作。