在我的应用程序中,我使用自定义窗口标题。并且在后面按下我正在调用相同活动的oncreate方法。我得到以下异常如何调用相同活动的oncreate方法onbackpressed -
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
代码是 -
private Bundle mBundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
mBundle=savedInstanceState;
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
.
.
.
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
//super.onBackPressed();
if(backFlag){
onCreate(mBundle);
backFlag=false;
}else{
finish();
}
}
回答 - 我找到了问题的解决方案。在背景上,我再次呼吁同样的活动
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
//super.onBackPressed();
if(backFlag){
backFlag=false;
Intent i=new Intent(this,MainActivity.class);
startActivity(i);
finish();
}else{
finish();
}
}
答案 0 :(得分:1)
在添加内容
之前必须调用requestFeature()
=>例外本身建议您在添加内容(即requestFeature()
)
setContentView()
现在,问题就在这一点上:
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
解决方案:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
setContentView(R.layout.activity_main);
还有一件事,为什么你需要在onCreate()
再次致电onBackKeyPressed()
?
答案 1 :(得分:1)
移动此行
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
以上
setContentView(....);
答案 2 :(得分:1)
更改你的onCreate()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBundle=savedInstanceState;
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
.
.
.
}
答案 3 :(得分:1)
这不是因为onCreate()
中调用方法的顺序。你因为这行而得到这个例外..
if(backFlag){
onCreate(mBundle);
backFlag=false;
}else{
finish();
}
当你反击时,你正在调用活动的onCreate()方法它将再次尝试调用requestWindowFeature()
,但所有视图都会添加,因此它会从{{1}中删除onCreate()
异常那么它会正常工作。
如果您不想关闭活动onBackpressed,请不要致电onBackPressed()
那就是..
像这样更新..
super.onBackpressed