是否必须从 onConfigurationChanged() 调用 setContentView() ?
我已经为我的活动设置了清单条目,以便它自行处理方向更改。
在我的 onConfigurationChanged()
中,我得到了这个:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
findViewById(R.id.header).post(new Runnable() {
@Override
public void run() {
}
});
}
经过几个月的正常工作后,我在 findViewById()
上遇到了 NullPointerException
代码>行。我的结论是,由于省略了 setContentView()
,因此尚未创建相关的 View
。
setContentView()
这里真的有必要吗?如果是这样,为什么它一直工作而没有发生任何事故?
I've set the manifest entry for my Activity so that it handles orientation changes by itself.
In my onConfigurationChanged()
, I've got this:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
findViewById(R.id.header).post(new Runnable() {
@Override
public void run() {
}
});
}
After months of working without problems, I've just had a NullPointerException
on the findViewById()
line. My conclusion is that the View
in question hasn't been created yet, due to the omission of setContentView()
.
Is setContentView()
really necessary here? If so, why has it been working all this time without incident?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,在这种情况下没有必要调用
setContentView
。代码中的其他内容导致findVieWById
返回 null。No, calling
setContentView
is not necessary in that situation. Something else in your code is causing thefindVieWById
to return null.来自 Android Activity 文档:
基本上,您需要确保保存实例状态,并在 onConfigurationChanged() 之后获取信息
希望这有帮助!
From the Android Activity Docs:
Basically, you need to ensure that you are saving your instance state, and getting the information back after onConfigurationChanged()
Hope this helps!