2012-03-18 16 views
10

Im新的android。我寫了幾個程序,並在手機上試用了它們。當我切換方向時,它就像我的手機重新啓動程序。我的所有變量都被重置。事實上,唯一不會重置的就是編輯文本視圖中的文本。這是什麼原因?我怎樣才能阻止它?我試圖在谷歌和堆棧溢出上看,但我所看到的是如何從改變所有在一起的視圖方向。我甚至在一個程序中嘗試用get text方法設置我的變量,但這不起作用。開關方向變量的損失

+1

見我的答案在這裏http://stackoverflow.com/questions/6764086/setting-the -back-of-an-activity – 2012-03-18 01:59:48

回答

8

當我切換方向時,它就像我的手機重新啓動程序。

好吧,準確的說,當前可見的Activity被完全銷燬並重新創建。 「應用程序」的其他組件可能會受到影響,也可能不會受到影響。

是什麼原因造成的?我怎樣才能阻止它?

它的設計和停止它,你可能會或可能不想這樣做。

如前所述,可以指定您想要自己處理「配置」更改(例如方向),或者甚至強制只有一個(例如橫向或縱向)。

但是,在許多情況下,應用程序開發人員可能會根據設備是處於一個方向還是另一個方向來選擇更改佈局。有些佈局在肖像中可能正常工作,但在橫向上不能正常工作(反之亦然),並且設計方法的目的(銷燬/重新創建當前可見的Activity)旨在適應這種情況。

如果開發人員選擇不處理配置更改自己或強制指定方向,則處理事件的正確方法是確保在「易失性」UI元素(如EditTexts)中輸入的所有數據都已正確保存並重新創建改變方向後。

要做到這一點,理解Activity的生命週期是必不可少的,因爲要利用在整個生命週期中調用的各種方法來保存/恢復數據。

基本閱讀...

Runtime Changes

Activity Lifecycle

Application Fundamentals

+0

感謝您的好徹底的答案和條款!完成後,至於爲什麼。但我必須誠實。我迷失在閱讀開發者頁面,我不明白他們的大部分內容,除非我手邊有一個很好的基礎知識和理解。我從例子和教程中學到最好的東西。和課程玩的方法。 – JBreezy901 2012-03-18 03:37:21

+0

@ JBreezy901​​:我完全理解你對開發者頁面的意思。 16個月前,當我第一次開始使用Android時,我曾經在同一個地方,甚至現在我可能只是通過很少的比例(只有我目前需要的東西)工作。應用基礎文檔以及活動及其生命週期的文檔絕對值得加書籤。很高興我能夠擺脫一些光明,玩得開心。 – Squonk 2012-03-18 05:43:09

2

這是通過設計,onCreate將在方向改變時被調用。如果不需要,您可以將其設置爲不響應AndroidManifest.xml中的方向更改,因此您的活動將不會被重新創建,因此您的活動設置爲android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"將限制爲縱向模式。

有關設置的更多信息,請參閱this

4

確保您實施了onSaveInstanceState並準備從的onCreate恢復您的活動,您將完成所有設置。這些將在循環中調用,所以之後你會有一個新的活動,但是如果你已經保存了狀態並且可以恢復它,那麼沒有什麼可擔心的。

+0

我仍然希望我的程序在從縱向切換時重新調整它的佈局和風景。我想要保存的所有東西都是我的變量。尤其是。這會工作嗎? – JBreezy901 2012-03-18 03:27:03

+0

是的,如果你把所有的變量放到那個包中,然後在你的'onCreate'方法中從包中檢索它們,而不是從頭開始初始化你的活動,那麼你將全部設置好。 – dldnh 2012-03-18 09:53:13

2

See this answer:尋找羅伯特的答案。這正是你需要做的。

+0

[永久鏈接](http://stackoverflow.com/a/4101501/1318194) – stackunderflow 2015-01-22 08:33:51

0

最好加android:configChanges="keyboardHidden|orientation|screenSize" to AndroidManifest.xml中in活動