旋转设备时我的应用程序崩溃了。我知道它崩溃了,因为当我旋转屏幕时,它会尝试创建新的视图来绘制和显示但是如何创建视图并在启动时正确显示它,但在尝试创建第二个新视图时崩溃?
我不知道我应该在这里发布我的代码的哪一部分?你能提供解决这个问题的线索吗?
我发现了一些有用的东西。我把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无法捕获异常。
我该如何解决这个问题?
答案 0 :(得分: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()
方法,以便您实现不同的布局或更改View
中的某些内容。然后,您应该使用先前保存的Bundle
并恢复在新创建的布局中保存的变量。
答案 1 :(得分:1)
只需将android:configChanges="orientation"
添加到您的活动
<activity android:name=".MyActivity"
android:configChanges="orientation"/>
如果您这样给出,那么如果您的屏幕方向发生变化,则不会调用oncreate。 如果您需要更多相关信息,可以查看this link
答案 2 :(得分:1)
你可以做几件事:
1)忽略屏幕方向更改。如果您的应用仅适用于纵向模式,则很可能在横向模式下效果不佳,反之亦然。最好是在活动中指定目标方向。
2)如果您想允许方向更改,那么您应该编写一些代码,使用不同/修改的布局重新创建视图。介意与我们分享代码?
答案 3 :(得分: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"
答案 4 :(得分:0)
将其添加到清单中的Activity标记:
android:configChanges="orientation|screenSize"
这将导致在轮换更改时不重新创建活动。 标记 sreenSize 适用于较新的设备(API级别13或更高),仅包含方向标记,当在运行API级别13或更高级别的设备上旋转时,活动将重新生成