方向更改时重新启动android活动

时间:2012-07-01 08:49:29

标签: java android eclipse

我读了很多关于这个问题的帖子,比如[this link] [1],一个解决方案是添加方向configChanges来清单和处理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);
...

6 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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();
    }
}

答案 2 :(得分:1)

在该活动的清单文件中写下这两行代码。

似乎这可以解决您的问题。<activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden"/>

答案 3 :(得分:1)

您的活动将在任何配置更改时重新启动。最有可能是因为键盘状态发生变化而重新启动。尝试将此添加到活动的属性:

android:configChanges="orientation|keyboard|keyboardHidden"

答案 4 :(得分:0)

如果您正在使用API​​级别12或更低级别

在menifest文件中,在声明您的活动名称后立即放下以下内容。

    android:configChanges="orientation"

e.g .-

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

在Android 3.2(API级别13)或更高版本的屏幕尺寸中,旋转变化也会发生变化,因此也要声明这一点。

为此,

    android:configChanges="orientation|screenSize"

答案 5 :(得分:0)

以下可能是原因

事件:screenSize

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

所以除了“orientation”之外还添加“screenSize”

相关问题