如何在方向改变时切换到其他活动(然后再返回)?

时间:2012-10-19 23:32:36

标签: android android-activity android-orientation

在我的Android应用程序中,我有一个主要活动“MyActivity”,它覆盖了onConfigurationChanged()方法。在该方法中,我检查方向的变化,如果更改为横向,则我调用另一个活动:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        super.onConfigurationChanged(newConfig);
        startActivity(new Intent(this, BaseFullScreenActivity.class));
    }
}

然后,当我将移动设备更改为横向时,将调用其他活动类“BaseFullScreenActivity”,这样可以正常工作。在该被调用的活动中,我再次覆盖onConfigurationChanged()方法以再次结束此子活动:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
    {
        super.onConfigurationChanged(newConfig);
        finish();
    }
}

然而,在第二个方向更改(回到肖像),这应该结束我的孩子活动并再次显示主要活动,应用程序崩溃,我收到以下错误:

android.app.SuperNotCalledException: 
Activity MyActivity did not call through to super.onConfigurationChanged()

我在两个活动中都覆盖了onStop()方法并调用了super.onStop(),但这对我没有帮助。

还有其他想法吗? 在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

为什么不做错误所暗示的?如果您将调用移到if语句之外的超类,则您的应用程序不会在第二个方向更改时崩溃。

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        startActivity(new Intent(this, BaseFullScreenActivity.class));
    }
}

答案 1 :(得分:0)

正如Sam所说,super()调用应该是你方法中的第一个语句。 (http://developer.android.com/training/basics/activity-lifecycle/pausing.html