0

旋转设备时我的应用程序崩溃。我知道它会崩溃,因为当我旋转屏幕时,它会尝试创建新的视图来绘制和显示,但是它如何创建视图并在启动时正确显示它,但是在尝试创建第二个新视图时会崩溃?

我不知道我应该在这里发布我的代码的哪一部分?你能给出解决这个问题的线索吗?


我发现了一些有用的东西。我放了 try/catch 语句,现在当我旋转设备时,它不会崩溃,但会显示一个空白页面,当我重新旋转到旧位置时,它会显示页面。这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    try{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
    } catch (Exception e) {
        Log.i("my_error", e.getMessage());
    }
}

但eclipse无法捕捉到异常。

我怎么解决这个问题?

4

5 回答 5

4

有两种可能的方法来做到这一点:

1)你不关心屏幕的方向变化,你只想“调整大小”。只需在您的清单文件中添加以下属性:

<activity
        android:name=".SplashScreen"
        android:configChanges="orientation|keyboardHidden|screenSize" ... />

并在您的活动中添加这行代码:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
            // do nothing, just override
}

2)您确实关心方向变化。然后,关于方向变化中的活动生命周期,您应该了解几件事。首先onConfigurationChanged()调用,你应该存储Bundle你需要的一切。例如,用户编辑了一个EditText,您应该保存该值。

为什么要这样做?因为之后onCreate()将再次调用该方法,以便您实现不同的布局或更改Views. 然后,您应该获取先前保存的Bundle并恢复您在新创建的布局中保存的变量。

于 2013-06-14T10:15:26.997 回答
1

您可以做几件事:

1) 忽略屏幕方向变化。如果您的应用只为纵向模式设计,那么它在横向模式下很可能看起来不太好,反之亦然。最好是在您的活动中指定目标方向。

2)如果您想允许方向更改,那么您应该编写一些代码重新创建具有不同/修改布局的视图。介意与我们分享代码吗?

于 2013-06-14T09:45:49.453 回答
1
@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
//Override this and recreate your view or set adapter here
    }

不要忘记添加android:configChanges="orientation"您的清单。

在旁注中,您可以像这样通过清单修复方向 - android:screenOrientation="portrait"

于 2013-06-14T09:46:15.363 回答
1

只需添加android:configChanges="orientation"到您的活动中

<activity android:name=".MyActivity"
        android:configChanges="orientation"/>

如果你这样给出,那么如果你的屏幕方向改变,oncreate 将不会被调用。如果您需要有关此的更多信息,可以查看此链接

于 2013-06-14T09:35:14.577 回答
0

将此添加到清单中的 Activity 标记中:

    android:configChanges="orientation|screenSize"

这将导致在轮换更改时不会重新创建活动。标志sreenSize适用于较新的设备(API 级别 13 或更高级别),仅包括方向标志,当在运行 API 级别 13 或更高级别的设备上旋转时,活动仍将重新创建。

于 2013-06-14T09:58:50.747 回答