标签:initialization android-activity android
以下代码不起作用,并引发由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之后获得.
标签:initialization,android-activity,android 来源: https://codeday.me/bug/20191209/2097567.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。