以下代码不起作用,并抛出由NullPointerException引起的RuntimeException
public class ListFilteredActivity extends Activity {
LinearLayout typeSelector = new LinearLayout(this) ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ScrollView sv = new ScrollView(this);
this.setContentView(sv);
//this.typeSelector = new LinearLayout(this);
this.typeSelector.setOrientation(LinearLayout.VERTICAL);
sv.addView(this.typeSelector);
}
当我将 this.typeSelection
的初始化移动到 onCreate() 中时,效果很好。
@Override
public void onCreate(Bundle savedInstanceState) {
...
this.typeSelector = new LinearLayout(this);
...
}
为什么会出现空指针错误?第一段代码中的内联声明在调用构造函数后立即发生,然后 onCreate() 就可以访问对象,不是吗?
最佳答案
LinearLayout
要求您传入 Context
.这是一个 Android 生命周期对象而不是 Java 对象。当直接声明和初始化字段时,这将使用 Java 默认构造函数进行初始化。但是,只有在 onCreate
生命周期方法发生后,您才会获得上下文,这要晚得多,并且是 Android 的一部分,而不是 Java。因此,当您使用 this
调用 LinearLayout 构造函数时,Android 需要一个对 Context 的引用,您只能在调用 onCreate 之后获得该引用。
关于android - 为什么这不起作用 - Android - onCreate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352957/