java - Android应用程序在旋转屏幕时崩溃

标签 java android android-layout rotation

我的应用程序在旋转设备时崩溃。我知道它会崩溃,因为当我旋转屏幕时,它会尝试创建新的 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/

相关文章:

java - 如何删除树中无效的子节点

java - 如何将标准输出重定向到Java中的内存结构?

java - 如何替换: [text](link) with <a href ="link">text</a> in java?

Android 布局与设备不匹配 [Android Studio]

android-studio - 不要在预览窗口创建线程 - 华为广告实现

java - 如何将构造函数传递给构造函数?

java - (HBase) 错误 : JAVA_HOME is not set and Java could not be found

android - 在 Composable 中收集转换后的 StateFlow

android - 对通话状态感到困惑

android - 对话框的标题太高