我的应用程序在旋转设备时崩溃。我知道它会崩溃,因为当我旋转屏幕时,它会尝试创建新的 View 来绘制和显示,但它如何创建 View 并在启动时正确显示它,但在尝试创建第二个新 View 时会崩溃?
我不知道我应该在此处发布代码的哪一部分?你能提供解决这个问题的线索吗?
<小时/>我发现了一些有用的东西。我放置了 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无法捕获异常。
如何解决这个问题?
最佳答案
有两种可能的方法可以做到这一点:
1)你不关心屏幕方向的变化,你只想“调整大小”。只需在 list 文件中添加以下属性即可:
<activity
android:name=".SplashScreen"
android:configChanges="orientation|keyboardHidden|screenSize" ... />
并在您的 Activity 中添加以下代码行:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// do nothing, just override
}
2)你确实关心方向的变化。然后,您应该了解有关方向更改中的 Activity 生命周期的一些事项。
首先,调用 onConfigurationChanged()
,您应该将所需的所有内容存储在 Bundle
中。例如,用户编辑了 EditText
,您应该保存该值。
为什么要这么做?因为之后将再次调用 onCreate()
方法,以便您实现不同的布局或更改 View
中的某些内容。然后,您应该获取之前保存的 Bundle
并恢复在新创建的布局中保存的变量。
关于java - Android应用程序在旋转屏幕时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17105365/