0

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

4 回答 4

1

这不是因为在..中调用方法的顺序。 onCreate()因为这一行,您会收到此异常..

 if(backFlag){
    onCreate(mBundle);
    backFlag=false;
}else{
    finish();
}

当您回压时,您将再次调用活动的 onCreate() 方法它会再次尝试调用requestWindowFeature()但所有视图都已添加,因此它会为您提供一个异常删除onCreate()onBackPressed()然后它将正常工作。

如果您不想在Backpressed 上关闭您的活动,请不要这样称呼super.onBackpressed它..

像这样更新。。

 if(backFlag){
          backFlag=false;
}else{
    finish();
}
于 2013-10-25T06:20:00.677 回答
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);  
               .
               .
               .
 }
于 2013-10-25T06:10:15.300 回答
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()

于 2013-10-25T06:04:07.650 回答
1

将这一行移到
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
上面
setContentView(....);

于 2013-10-25T06:04:41.190 回答