【问题标题】:How to switch to other activity at orientation change (and then back again)?如何在方向改变时切换到其他活动(然后再返回)?
【发布时间】:2012-10-19 23:32:36
【问题描述】:

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

@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(),但这对我没有帮助。

还有其他想法吗?
提前感谢您的帮助!

【问题讨论】:

    标签: android android-activity android-orientation


    【解决方案1】:

    为什么不按照错误提示做呢?如果您将调用移至 if 语句之外的超类,则您的应用不会在第二次方向更改时崩溃。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-04
        • 1970-01-01
        • 1970-01-01
        • 2011-12-25
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        相关资源
        最近更新 更多