gpt4 book ai didi

android - ActionBarActivity 和 FragmentActivity 中的 setContentView

转载 作者:行者123 更新时间:2023-11-30 02:44:28 26 4
gpt4 key购买 nike

在FragmentActivity中,super.onCreate和setContentView的顺序并不重要,为什么?

fragment Activity

//OK
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_waiting_for_confirmation_order);
}

//OK
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_waiting_for_confirmation_order);
super.onCreate(savedInstanceState);
}

但在 ActionBarActivity 中,它会抛出 NullPointerException。

ActionBarActivity

//OK
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_waiting_for_confirmation_order);
}

//ERROR
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_waiting_for_confirmation_order); //NullPointerException
super.onCreate(savedInstanceState);
}

最佳答案

原因是 ActionBarActivity(来自 support-v7)使用委托(delegate)对象来使用真实实现或兼容实现。

此委托(delegate)在 ActionBarActivity 的 onCreate() 方法中实例化,而 ActionBarActivity 的方法 setContentView() 只是在执行 delegate.setContentView().

这就是为什么在 onCreate() 之前调用 setContentView() 会出现 NPE 的原因。

FragmentActivity(或实际上是标准 Activity)中,顺序无关紧要,因为 setContentView() 不依赖于可以实例化的特定对象在 onCreate() 中。

关于android - ActionBarActivity 和 FragmentActivity 中的 setContentView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com