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

标签 android initialization android-activity

以下代码不起作用,并抛出由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/

相关文章:

android - API 回调 URL 不适用于通过 Google Checkout 进行 Android 应用内购买

android - 相当于 objective-c 中的 LocationManager .onLocationChanged

c++ - 指针已初始化,但出现错误 “Access violation reading location 0xCCCCCCCC”。为什么?

android - 如何清除 Android 设备关机时的默认 Activity ?

java - 在这个 RecyclerView 点击监听器中这个接口(interface)是干什么的?

android - 如何在 viewpager 中传递 Arraylist <uri> 而不是数组中的整数

用于从预订网站获取可用座位信息的 Android 应用程序

initialization - init() 和dispatch_sync 的难题

c++ - 如何在C++中初始化成员的构造函数参数

java - 无法使用字符串作为选项卡名称