2013-05-08 88 views
2

假設我的應用程序包含兩個活動A和B. AndroidManifest中的這兩個都只限於肖像。Android:避免在從其他活動返回時調用onCreate()

活動A開始活動B. 在活動B中,有一個按鈕,單擊時會調用finish()

問題是... 當我擁垂直(縱向)的設備,然後單擊該按鈕,調用順序是

B.onStop(); 
B.onDestory(); 
A.onStart(); 

然而,當我橫握設備(景觀),序列成爲

B.onStop(); 
B.onDestory(); 
A.onCreate(); 
A.onStart(); 

我不想在A.onCreate()

我試着按下Back按鈕。沒有調用A.onCreate()。 所以...模擬Back按鈕是某種解決方案

我曾嘗試以下,所有的人都稱爲A.onCreate() ..

finish(); 

onBackPressed() 

dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); 

EDITED

我不得不再說一遍。 AndroidManifest中的這兩項活動都僅限於肖像。 onConfigurationChanged永遠不會被調用。

不接受靜態變量。由於這會導致其他問題。

+0

在活動A中添加'android:configChanges =「orientation」'可以跳過'A.onCreate()'。但我期待更好的解決方案。 – 2013-05-08 06:44:05

+0

當方向更改時,活動被銷燬並重新創建。如果你不想活動重新開始檢查處理的配置改變自己在http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange – Raghunandan 2013-05-08 06:44:12

+1

看看這個:HTTP:// stackoverflow.com/questions/8814551/how-to-stop-activity-recreation-on-screen-orientation – andy 2013-05-08 06:52:56

回答

2

發生這種情況是因爲您已經在應用程序啓動的某個階段更改了方向,即imo。
在方向改變時,活動被破壞然後重新創建。爲了避免它處理方向。

通過在清單文件的活動下添加以下行來自行處理方向更改。

<activity android:name=".Activity_name" 
android:configChanges="orientation|keyboardHidden|screenSize" 
+0

我正在使用相同的解決方案,正如我對該問題的自己的評論中所述。 你的陳述是正確的,並且有效。只是想知道是否有更好的解決方案。 我不想將此行添加到Manifest中的所有活動。 – 2013-05-08 08:24:11

+0

@PeterLo,對不起,我錯過了。這取決於你爲什麼不想再次調用onCreate()方法。應該有一些工作。 – 2013-05-08 08:54:01

0

如果你想不調用一些代碼在onCreate時方向發生變化,你可以做如下:您的活動覆蓋onRetainLastNonConfigurationInstance()

,並使其返回Boolean.TRUE

在你的onCreate檢查Boolean.TRUE.equals(getLastNonConfigurationInstance()),如果是的話,這意味着你的onCreate已被調用,因爲(並且只是)方向已被改變。

0

在你的條件,設置

<activity android:name=".Activity_name"android:configChanges="orientation|keyboardHidden|screenSize" 

可以避免活動重新創建新實例,但有些設備會導致黑屏的onCreate仍然會被調用,如果要防止出現這種情況,你可以覆蓋onConfigurationChanged( )方法,並執行此操作:

@Override 
protected void onConfigurationChanged(Configuration newConfig) { 
    newConfig.orientation = Configuration.ORIENTATION_PORTRAIT; 
    super.onConfigurationChanged(newConfig); 
} 
相關問題