2013-06-28 61 views
4

我爲活動創建了一個活動和兩個佈局,其中一個用於橫向和縱向模式。這兩個佈局具有相同的視圖和ID。在清單文件中,我在活動中添加了 android:configChanges="orientation"爲什麼在onConfigurationChanged之後調用onCreate()?

現在,根據文檔,如果我提到configChanges幷包含onConfigurationChanged方法,則活動不會重新啓動。

onCreate(Bundle savedInstanceState) { 
    Log.i("Message","inside oncreate()") ; 
} 

onConfigurationChanged(Configuration newConfig) { 
    Log.i("Message","inside onconfigurationchanged()") ; 
} 

當我改變方向時,我的日誌顯示了兩條消息。當方向改變時,有沒有辦法阻止onCreate()方法被調用?

+0

問:有什麼方法可以在方向更改時停止調用onCreate()方法嗎? A.我沒有辦法知道。 :-( – g00dy

+1

@ g00dy with android:configChanges =「orientation | screenSize」onConfigurationChanged被調用 – Blackbelt

+0

@blackbelt - 是的,我忘了 - 我應該刪除評論嗎? – g00dy

回答

7

,也許你可以添加你希望忽略更多的配置變化,因爲在Android上有一定的API開始,方向由其他標誌的,作爲documentation說,關於「定位」:

屏幕方向已改變 - 用戶旋轉了設備。 注意:如果您的應用程序的目標是API級別13或更高(由minSdkVersion和targetSdkVersion屬性聲明爲 ),那麼您應該也會聲明「screenSize」配置,因爲當設備在縱向和橫向之間切換時它也會更改 。

所以,請儘量使用,並告訴我們,如果它幫助:

android:configChanges=orientation|screenSize" 

這裏是關於「屏幕尺寸」的文檔:

當前可用的屏幕尺寸已經改變。這代表 當前可用尺寸的變化,相對於當前方面的 比率,因此當用戶在橫向和縱向之間切換時會發生變化。但是,如果您的應用程序定位到API級別12或更低, ,那麼您的活動始終會處理此配置更改 (此配置更改不會重新啓動您的活動,即使在Android 3.2或更高版本的設備上運行 )。在API級別13


編輯:這裏是我的簡單的代碼來證明它的工作原理:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.i("Message","inside oncreate()"); 
    } 

    @Override 
    public void onConfigurationChanged(final Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     Log.i("Message","inside onconfigurationchanged()"); 
    } 
} 

清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.test" android:versionCode="1" 
    android:versionName="1.0"> 

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> 

    <application android:allowBackup="true" android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" android:theme="@style/AppTheme"> 
    <activity android:name="com.example.test.MainActivity" 
     android:label="@string/app_name" android:configChanges="orientation|screenSize"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    </application> 

</manifest> 
+0

我的應用程序的最低SDK設置爲8,目標SDK設置爲9:/ – R4chi7

+0

試圖說明..仍然調用onCreate – R4chi7

+0

設備或代碼出現問題,因爲我的代碼工作得很好,我現在將發佈我的簡單代碼,在我的代碼中,onCreate甚至在改變方向時都不會調用,只有onConfigurationChanged被調用 –

1

正式文件說, 「方向」在清單能夠防止屏幕方向更改和「鍵盤隱藏」以防止重新啓動在鍵盤可用性發生變化時開始。 所有你需要做的是在您的清單聲明如下代碼:

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

它爲我的項目。 如果它不起作用,請嘗試將「keyboardHidden」更改爲「screenSize」。

相關問題