2010-11-23 51 views
4

我不知道這是否是從標題我問清楚,所以這裏有一些步驟來重現(假設你有一個微調佈局):在微調我可以強制微調器的下拉視圖在方向更改上保持可見嗎?

  1. 點擊>下拉列表中打開。
  2. 將設備從縱向旋轉到橫向(反之亦然)>列表正在關閉。

我的問題是,我想保持旋轉設備後打開列表。我知道這通常是可能的,如果覆蓋onConfigurationChanged,但我已爲橫向模式定義了不同的佈局,因此在我的onConfigurationChanged方法中,我必須調用setContentView並設置橫向微調器的適配器,它關閉下拉視圖那是在肖像模式下打開的。

有沒有一種方法可以防止下拉列表關閉或者可能迫使它在旋轉設備後顯示?

回答

0

默認情況下,從縱向切換到橫向的行爲將重新啓動您的活動。因此,您可以將Spinner狀態保存到某處,例如將SharedPreferences保存並在重新啓動活動時(在onCreate()或onResume())方法中讀取它。

+0

感謝您的建議,但我已經爲我的微調器嘗試了onSaveInstanceState/onRestoreInstanceState,並且在這種情況下它並沒有真正的幫助。它只保存選擇的項目,而不是列表已打開的事實。是否有另一種方法來保存微調器的狀態(包括下拉視圖已打開的事實)?或者也許我可以以某種方式保存dropdownview的狀態? – Ade 2010-11-23 11:51:03

6

我發現了一個非常難看的解決這個(以下簡稱「行動」發生在onConfigurationChanged法):

  1. 調用的setContentView之前,檢查下拉列表視圖顯示(* ),如果是,請保存當前在微調器中選擇的位置(int pos = spinner.getSelectedItemPosition())。

  2. 主叫的setContentView和設置旋轉器適配器,如果下拉視圖在步驟1中示出後,強制下拉視圖通過調用performClick上旋轉器,以顯示:

    spinner.setSelection(pos);// this way we make sure that the same item 
              // remains selected after rotating the device 
    spinner.performClick(); //show the dropdown view 
    

(*)檢查下拉列表視圖是否顯示爲棘手的部分。我還沒有發現(還),讓我知道下拉視圖是否顯示,所以我不得不做以下的方法:

  • 保持在布爾變量(名爲微調的按下狀態,例如,isClicked)。

  • 設置一個onTouchListener爲所說的紡絲器和在onTouch方法設置isClicked爲true(攻牙旋轉器,所述dropdwon視圖打開時,使isClicked == TRUE意味着下拉視圖是示出)。

  • 覆蓋的onkeydown的onkeyup和當按下後退按鈕,如果isClicked是真實的,它設置爲false(I假定按壓背部與isClicked == TRUE裝置關閉所述下拉視圖) 。

  • 使用值isClickedonConfigurationChanged方法來檢查是否被示出的下拉圖。

就像我說的,這是一個醜陋的修復,但它是唯一一個我能想出直到現在。如果有人有其他想法,請張貼他們。

相關問題