Android 设置全局按钮和编辑文本对象
当我尝试在全局范围内初始化Button和EditText对象时,会出现空指针异常,我无法理解。除了应用程序显示我的布局的最小值之外,我已经注释掉了所有内容,但这仍然会导致崩溃:Android 设置全局按钮和编辑文本对象,android,global-variables,Android,Global Variables,当我尝试在全局范围内初始化Button和EditText对象时,会出现空指针异常,我无法理解。除了应用程序显示我的布局的最小值之外,我已经注释掉了所有内容,但这仍然会导致崩溃: private EditText addmoney = (EditText)findViewById(R.id.addmoney); R.id.addmoney肯定,肯定存在。那又怎么样?是否无法在全局范围内声明EditText?在类扩展活动中,我需要能够从onCreate和onPause调用它,是否有其他方法可以这样
private EditText addmoney = (EditText)findViewById(R.id.addmoney);
R.id.addmoney肯定,肯定存在。那又怎么样?是否无法在全局范围内声明EditText?在类扩展活动中,我需要能够从onCreate和onPause调用它,是否有其他方法可以这样做
编辑:
我尝试使用shade的方法首先膨胀布局,但它会导致错误,显然在调用onCreate()之前不允许您使用系统服务,而膨胀视图需要使用系统服务。只有在为当前活动设置内容后,您才必须执行
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
}
或者,您可以这样做:
private View dummy = (View) View.inflate(this, R.layout.dummy, null);
private EditText addmoney = (EditText) dummy.findViewById(R.id.addmoney);
。。。在onCreate(或其他任何地方)中:
由于您已经实例化了EditText视图的父视图,因此可以在没有NPE的情况下引用它
注意:充气的第一个参数是上下文。因此,您需要一个活动的上下文才能使其工作
- 哦,错了,D级
R.id.addmoney
元素。其他布局中可能存在具有相同id的相同元素。这就是为什么必须首先调用setContentview(…)
。@Juri:实际上比这个简单findViewById
在视图层次结构中执行简单的树遍历。如果没有视图层次结构,那么不仅找不到任何东西,也没有开始遍历的地方。
setContentView (dummy);