在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:

将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。


当前回答

我只是简单地补充了一句:

android:configChanges="keyboard|keyboardHidden|orientation"

在AndroidManifest.xml文件中,并且没有在我的活动中添加任何onConfigurationChanged方法。

所以,每当键盘滑出或滑入时,什么都不会发生!也可以查看这篇关于这个问题的文章。

其他回答

使用定向监听器在不同的定向上执行不同的任务。

@Override
public void onConfigurationChanged(Configuration myConfig) 
{
    super.onConfigurationChanged(myConfig);
    int orient = getResources().getConfiguration().orientation; 
    switch(orient) 
    {
       case Configuration.ORIENTATION_LANDSCAPE:
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                    break;
       case Configuration.ORIENTATION_PORTRAIT:
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    break;
       default:
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    }
}

要在Android清单中进行的更改包括:

android:configChanges="keyboardHidden|orientation" 

要在活动中添加的内容包括:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

注意:如果将来有人和我面临同样的问题,我会发布这个答案。对我来说,下面这行是不够的:

android:configChanges="orientation"

当我旋转屏幕时,没有调用方法`onConfigurationChanged(配置新配置)。

解决方案:即使问题与方向有关,我也必须添加“screenSize”。因此,在AndroidManifest.xml文件中,添加以下内容:

android:configChanges="keyboardHidden|orientation|screenSize"

然后实现方法onConfigurationChanged(Configuration newConfig)

即使更改android的方向,onCreate方法仍会被调用。因此,将所有繁重的功能转移到这个方法并不会对您有所帮助

您可以在活动中使用ViewModel对象。

ViewModel对象在配置更改期间自动保留,以便它们所保存的数据可立即用于下一个活动或片段实例。阅读更多信息:https://developer.android.com/topic/libraries/architecture/viewmodel