2010-06-22 77 views
13

我做了一個搜索屏幕,其中包含關鍵字,過濾器和搜索按鈕的一個選項卡,以及針對不同類型結果(每個都包含ListViewArrayAdapter)的三個可選選項卡。開始活動時,如果搜索已執行,開發人員可以選擇將結果作爲額外的Parcelable[]傳入。在onCreate()方法中,我創建了通過Parcelable[]的三個選項卡中的每一個。Android方向更改調用onCreate

當我從過濾器選項卡上的按鈕調用搜索時,我清除選項卡並使用新結果重新創建它們,這很好地起作用。問題在於,當您旋轉設備時,Android的自動方向切換支持會重新創建整個活動,請撥打onCreate()。這意味着我的搜索結果重置爲開始活動時通過的Parcelable[]

我到目前爲止唯一的解決方案是致電finish(),然後startActivity()實質上重新開始活動與新的結果。我確信必須有一個更簡單的解決方案,而且我做了一些非常不喜歡的事情。

有沒有更好的方法來做到這一點?

+1

4年後,你編輯我的問題來改變格式?也許你應該對ListView,ArrayAdapter和Parcelable執行相同的操作。你也錯過了第二段中的onCreate()。 – Samah 2015-02-10 22:55:56

+2

爲什麼不是抱怨Pratik Butani沒有全部格式化,而是自己改進格式? – 2015-11-27 15:20:26

+0

你錯過了一個。 :P – Samah 2015-12-02 21:44:31

回答

31

有cource的。只需添加configChanges屬性到AndroidManifest.xml,這樣的:

<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" /> 

Activity restart on rotation Android How do I disable orientation change on Android? http://developer.android.com/guide/topics/manifest/activity-element.html#config

+0

謝謝!我將我的SearchResults實例移動到一個應用程序單例中,它都可以工作。 :)爲Android 3.2(API級別13)和更新的 – Samah 2010-06-23 01:17:39

+0

:android:configChanges =「keyboardHidden | orientation | screenSize」 – Vlad 2016-03-17 23:28:34

13

你描述的是默認的行爲。您必須自行檢測並處理這些事件:

android:configChanges 

您的清單以及您想要處理的更改。因此,對於方向,你可以使用:

android:configChanges="orientation" 

和鍵盤被打開或關閉,您可以使用:

android:configChanges="keyboardHidden" 

如果要同時處理你可以用管道命令一樣將它們分開:

android:configChanges="keyboardHidden|orientation" 

這將觸發任何Activity調用onConfigurationChanged方法。 如果覆蓋可以傳入新值的方法。

希望這會有所幫助。