我有一个关于 Android 编程的问题。 当我写这样的 Activity 时:
package com.mathquiz;
import android.widget.ImageButton;
public class ChooseMode extends ActionBarActivity {
private ImageButton easyButton=(ImageButton)findViewById(R.id.easy_button);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_mode);
easyButton.setVisibility(View.INVISIBLE);
}
Eclipse 在第 4 行抛出 NullPointerException 但是,如果我在 onCreate 方法中分配“easyButton”,一切都会好的。
package com.mathquiz;
import android.widget.ImageButton;
public class ChooseMode extends ActionBarActivity {
private ImageButton easyButton;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_mode);
easyButton=(ImageButton)findViewById(R.id.easy_button);
easyButton.setVisibility(View.INVISIBLE);
}
请帮助我理解这个问题。
最佳答案
它不能像您所说的那样“实例化”,因为在第一个示例中,您还没有设置内容 View 。 Android 的生命周期方法有特定的顺序,在调用构造函数之后发生。
该方法按预期工作,它只是返回 null
,因为它当前没有找到任何内容。
此外,使用需要使用当前 Activity
作为 Context
的实例变量将不起作用(在下面的示例中,this
指的是到 ChooseMode
实例)。
例如
public class ChooseMode extends ActionBarActivity {
private SharedPreferences = PreferenceManager.getDefaultSharedPreferences (this);
使用时会抛出一个NullPointerException
。
关于java - findViewById() 没有被实例化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806766/