Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置全局按钮和编辑文本对象_Android_Global Variables - Fatal编程技术网

Android 设置全局按钮和编辑文本对象

Android 设置全局按钮和编辑文本对象,android,global-variables,Android,Global Variables,当我尝试在全局范围内初始化Button和EditText对象时,会出现空指针异常,我无法理解。除了应用程序显示我的布局的最小值之外,我已经注释掉了所有内容,但这仍然会导致崩溃: private EditText addmoney = (EditText)findViewById(R.id.addmoney); R.id.addmoney肯定,肯定存在。那又怎么样?是否无法在全局范围内声明EditText?在类扩展活动中,我需要能够从onCreate和onPause调用它,是否有其他方法可以这样

当我尝试在全局范围内初始化Button和EditText对象时,会出现空指针异常,我无法理解。除了应用程序显示我的布局的最小值之外,我已经注释掉了所有内容,但这仍然会导致崩溃:

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级

通过setContentView在活动中设置的内容视图(xml)需要保存EditText元素R.id.addmoney。能否将活动代码粘贴到设置内容视图的位置。为了使我的方法能够工作,您需要一个活动的上下文。调用super.onCreate(Bundle)后,上下文将变为活动上下文。顺便说一句,您可以使用任何上下文(来自任何活动)或应用程序上下文,只要它们处于活动状态。确切地说,这是因为活动需要知道它应该使用哪个
R.id.addmoney
元素。其他布局中可能存在具有相同id的相同元素。这就是为什么必须首先调用
setContentview(…)
。@Juri:实际上比这个简单
findViewById
在视图层次结构中执行简单的树遍历。如果没有视图层次结构,那么不仅找不到任何东西,也没有开始遍历的地方。
setContentView (dummy);