为什么这样不起作用-Android-onCreate()

前端之家收集整理的这篇文章主要介绍了为什么这样不起作用-Android-onCreate() 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

以下代码不起作用,并引发由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);
     }

当我在onCreate()中移动this.typeSelection的初始化时,它的效果很好.

    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       this.typeSelector = new LinearLayout(this);
       ...
    }

为什么会出现空指针错误?第一段代码中的内联声明在调用构造函数后立即发生,然后onCreate()可以访问该对象,不是吗?

最佳答案
LinearLayout要求您传入Context.这是一个Android生命周期对象,而不是Java对象.直接声明和初始化字段时,将使用Java默认构造函数对其进行初始化.但是,一旦onCreate生命周期方法发生,您将仅获得上下文,该方法要晚得多了,并且是Android(而不是Java)的一部分.因此,当您以此方式调用LinearLayout构造函数时,Android会期望对Context的引用,该引用仅在调用onCreate之后获得.
原文链接:https://www.f2er.com/android/531554.html

猜你在找的Android相关文章