2010-04-07 67 views
12

我有ListView中的Activity和Activity的onCreate方法我有用於填充ListView的Data的代碼這個Data是基於服務器的,因此填充包括調用Network URLs 。我有相同Activity類中的ListView的ArrayAdapter。活動中的Android ListView在更改方向時刷新

現在我所面臨的問題是,在其餘所有情況下,我的活動都以正確的方式行事,但是當方向[肖像轉爲景觀或其他方式]發生時,數據正在丟失並且數據較新調用是需要填充相同的舊數據現在,這是不是打算出代碼,我應該如何處理它。

回答

23

Android會停止並重新啓動您的活動,除非您已經告訴它您將自行處理方向更改。它這樣做是爲了您可以指定不同的資源(例如佈局),這些資源是特定於方向的(除其他原因外)。

您需要將android:configChanges="orientation"添加到您的AndroidManifest.xml中的活動分析中,並且您需要覆蓋onConfigurationChanged()。我不相信你需要在onConfigurationChanged()中做任何特別的事情,只是簡單地實現它就應該做到這一點。

+6

我認爲您不需要重寫onConfigurationChanged()。添加android:configChanges應該足夠了。 – 2010-04-07 12:49:16

+1

OMG這是我可以想象的最大的救濟...你不知道你是如何拯救了我的生命...謝謝噸對於你剛剛給我的WonderFul洞察力.. – 2010-04-07 13:08:07

+0

來想一想, janfsd可能是正確的......如果你在onConfigurationChanged中沒有做任何有用的事情,那就讓默認實現做到這一點。 – rascalking 2010-04-07 13:56:27

2

AFAIK整個活動重新獲得方向變化! 如果您切換到anoter應用程序並稍後返回,情況也是如此。 我建議存儲數據是SharedPreferences或將它們序列化到XML中並存儲它們。

另一種可能性可能是註冊您自己的將數據存儲在內存中的服務,並且該活動會聚合服務中的數據。

+0

我認爲註冊服務是最好的選擇是如此。 – 2010-04-07 06:07:20

+0

我在哪裏可以更深入地瞭解Android服務以實現我的目的 – 2010-04-07 09:56:54

12

對於那些針對API 13或更高版本,「screenSize」也應該使用。如果是你的情況,請將

android:configChanges="orientation|screenSize" 

添加到您的Android清單。

更多信息here

0
android:configChanges="orientation|screenSize" 

只有當我們沒有橫向模式的另一個佈局時,這些代碼才能使用!