2012-04-03 38 views
2

我發現當我們通過屏幕旋轉更改當前活動的方向時,之前的活動將在後臺重新創建。Android活動正在重新創建時,不同屏幕方向的開始下一個活動

我想要說的是,例如:

我曾在清單文件

<activity android:screenOrientation="portrait" android:name="package.PotraitActivity"></activity> 
<activity android:screenOrientation="landscape" android:name="package.MyActivity"></activity> 

在PotraitActivity.java設置屏幕方向兩個活動,

Button mybutton = (Button)findViewById(R.id.mybutton); 
mybutton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View view) 
    { Intent intent = new Intent(this,MyActivity.class); 
    startActivity(intent); 
    } 
}); 

當點擊myButton時,LandscapeActivity已經啓動。但同時也調用了PotraitActivity中的OnCreate()方法。

我發現同樣的事情發生時:

  1. 屏幕方向兩個活動不同,或者
  2. 屏幕旋轉爲MyActivity(screenOrientation =「用戶」)啓用。每次我們旋轉MyActivity時,都會調用PotraitActivity中的OnCreate()方法。

任何人都有想法嗎?

回答

0

android:configChanges="orientation"設置爲您的package.PotraitActivity清單中的活動。設置這將忽略默認的屏幕方向實現,並會給你控制手動覆蓋它。

+0

即使我已經設置了android:configChanges =「orientation」,發生了這種情況......無論如何感謝您的評論=) – Soosoo 2012-04-03 09:57:35

+0

糟糕對不起Waqas ....我曾嘗試將android:configChanges =「orientation」添加到包中。 PotraitActivity,它是作品!你能否進一步解釋爲什麼這樣做? – Soosoo 2012-04-03 10:11:25

+0

這個設置告訴框架,如果方向發生變化,你會在你的代碼中手動處理它(加載新的佈局,如果有的話) – waqaslam 2012-04-03 10:59:19

1

在按鈕的onclick函數中調用finish()。

Button mybutton = (Button)findViewById(R.id.mybutton); 
mybutton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View view) 
    { Intent intent = new Intent(this,MyActivity.class); 
    startActivity(intent); 
    finish(); 
    } 
}); 

謝謝...

+1

我試過了,它是工作。你有沒有任何想法,爲什麼活動繼續重新創建沒有調用finish()?因爲我知道OnCreate方法只會在活動首次創建時調用。無論如何感謝您的答案。這對我很有幫助=) – Soosoo 2012-04-03 10:19:36

+0

只有在活動首次創建時纔會調用OnCreate方法。當我們轉到另一個屏幕時暫停,當我們再次調用它時,繼續它。但是如果我們調用finish(),那麼這個活動就會破壞並再次啓動它。謝謝,如果我的回答有幫助,請你投我一票。 – user4232 2012-04-03 10:29:09

0
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

最好設置在OnCreate中)方向(也包括manifeast文件中加入這一行均具有活性

機器人:configChanges = 「keyboardHidden |方向」

0

我最近遇到過類似的情況,這真令人沮喪。所以我決定在這裏寫我的解決方案,雖然這是一個老問題。

有兩個活動,活動A和活動B.活動A是縱向的正常活動,而用於顯示視頻的活動B是橫向的。當活動A開始活動B.活動A在每次啓動活動B.

不過,我寫了類似的演示這些事情不會發生的時間再造本身

奇怪的事情發生。

我懷疑有什麼區別,並在原始項目的styles.xml中找到這一行。

<item name="android:windowIsTranslucent">true</item> 

因此,我刪除此行並重新啓動項目。一切都恢復正常。

這是我的猜測: 活動B中的SurfaceView將在其窗口中打孔以允許其表面顯示。加上android:windowIsTranslucent屬性,系統會判斷上一個活動是否可見並重新創建。

解決方案: 只需刪除<item name="android:windowIsTranslucent">true</item>

相關問題