5

我阅读了许多关于此问题的帖子,例如 [此链接][1],一种解决方案是将方向配置更改添加到清单并处理 onConfigurationChanged 事件,以防止在旋转时再次调用 onCreate 活动。我做到了,事件被正确触发,但是,在执行之后,onCreate方法也被执行了!为什么?我错过了什么?谢谢

显现,

<activity 
            android:name="webPush"
            android:configChanges="keyboardHidden|orientation"/>

活动,

@Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.vistaaib);
    }

@Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vistaaib);
...
4

6 回答 6

11

我认为这会奏效......

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想在为 API 级别 13 或更高级别开发时防止由于方向更改而导致运行时重新启动,您必须使用

android:configChanges="orientation|screenSize"
于 2012-07-01T09:07:54.957 回答
2

我做了这个。我将此代码添加到清单中,并且效果很好。

<activity
        android:name="?"
        android:label="@string/?"
        android:theme="@style/?" 
        android:configChanges="orientation|screenSize">

如果您想在设备旋转时更改某些内容,则需要在您的活动下添加它。

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();
    }
}
于 2013-05-05T12:15:08.347 回答
1

在该 Activity 的清单文件中写入这两行代码。

看来这会解决你的问题。<activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden"/>

于 2012-07-01T08:58:28.287 回答
1

您的活动将在任何配置更改时重新启动。很可能它正在重新启动,因为键盘状态发生了变化。尝试将此添加到活动的属性中:

android:configChanges="orientation|keyboard|keyboardHidden"
于 2012-07-01T08:58:52.060 回答
0

以下可能是原因

事件:屏幕大小

当前可用的屏幕尺寸已更改。这表示当前可用尺寸相对于当前纵横比的变化,因此当用户在横向和纵向之间切换时会发生变化。但是,如果您的应用程序以 API 级别 12 或更低级别为目标,那么您的 Activity 始终会自行处理此配置更改(此配置更改不会重新启动您的 Activity,即使在 Android 3.2 或更高版本的设备上运行时也是如此)。在 API 级别 13 中添加。

所以随着“方向”添加“screenSize”以及

于 2013-08-23T13:31:30.407 回答
0

如果您正在为 API 级别 12 或更低级别工作

在清单文件中,在声明您的活动名称后添加以下内容。

    android:configChanges="orientation"

例如-

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

在 android 3.2(API 级别 13)或更高版本中,屏幕尺寸也会随着旋转变化而变化,所以也要声明这一点。

为了这,

    android:configChanges="orientation|screenSize"
于 2012-10-11T12:12:56.793 回答