2012-02-15 64 views
0

我正在開發一個android應用程序,而不理解後退按鈕。後退按鈕需要3次嘗試

有一個活動(說A1),通過點擊一個按鈕,用戶轉到另一個活動(比如A2)。一旦用戶完成A2活動,他點擊後退按鈕,返回到前一個活動A1。所有的文檔都說,A1會在這裏onResume()。

它確實。但是,如果我在A2中,並更改屏幕方向(從風景到人像或反之亦然),則會發生非常不同的事情。 A2的活動再次展現出自己的想象力,進入不同的屏幕方向。當我現在按BACK時,活動A2再次出現(不改變屏幕方向)。再次按下BACK,再次導致活動A2重新出現。第三次按下回到活動A1。

我在做什麼錯在這裏,我錯過了什麼?謝謝

彼得

回答

0

我的問題沒有完全正確地表達。我略微簡化了案例。我正在使用微調器,而不是按鈕,轉移到下一個活動。

微調(和圖庫)有一個嚴重的錯誤,在文檔中沒有提及 - 當用戶物理地點擊微調控件時,以及當微調框架首先由框架代碼佈置時,OnItemSelectedListener事件處理程序被調用。因此,您的微調處理代碼必須確定事件是由用戶選擇還是由微調佈局觸發的。最簡單的方法是讓Spinner中的第一項始終爲「尚未選擇」,並忽略該選擇中的所有事件。 見Android Spinner selection及類似帖子。

在我的情況下,方向改變導致微調器重新佈局,因此我得到了兩個事件,第一個佈局事件,第二個來自先前選擇的條目。而造成了一個虛假的第二個活動啓動,而表示需要3個後退按鈕才能「回到」第一個活動。它實際上是在第一次按下後,然後微調員發佈了一個佈局事件和一個定期事件,讓我在第二個活動中兩次。這在屏幕上沒有看到,但使用日誌消息。

當您改變方向時,當前活動被銷燬,並且一個新的活動被創建/開始。 當您更改方向並按返回鍵時,先前的活動從暫停堆棧的頂部彈出,銷燬,並創建/啓動該活動的新版本。

當您更改屏幕方向時,舊方向的活動永遠不會保留。它會立即銷燬,或者如果它低於Paused堆棧,它會在頂端被銷燬。

-1

你沒有處理配置更改。退房this鏈接它可能會幫助你。

當您將方向從縱向更改爲橫向或橫向更改爲縱向時,如果未處理配置更改,則重新創建活動。

+0

那麼你是說暫停的活動堆棧看起來像這樣? (Arggh,不能在評論中放置換行符)堆棧頂部 - 橫向活動A2 - 縱向END中的活動A2。這看起來很違反直覺。 – 2012-02-15 15:07:20

+0

你的背景堆棧不會知道你的活動是縱向還是橫向。所以它就像堆棧的頂部 - >活動A2 - >另一個活動A2 - >堆棧的END。 – Enigma 2012-02-16 13:14:19

+0

這似乎與直覺相反,因爲Enigma提出的建議是錯誤的。這不是Enigma的錯 - 我沒有提供足夠的信息來描述問題。但事實是,配置的改變會導致舊的Activity被破壞,而不是保存在堆棧中。 – 2012-02-21 05:26:01