android.util.AndroidRuntimeException:在android中添加内容异常之前必须调用requestFeature()

时间:2013-10-25 06:00:05

标签: android bundle

在我的应用程序中,我使用自定义窗口标题。并且在后面按下我正在调用相同活动的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();
    }
}

4 个答案:

答案 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