2010-09-04 242 views
4
HashMap myMap = (HashMap) getLastNonConfigurationInstance(); 

myMap始終爲空。 getLastNonConfigurationInstance()返回一個對象。我的地圖有兩個鍵「符號」和「名稱」。getLastNonConfigurationInstance總是返回null

public Object onRetainNonConfigurationInstance() 
    { 
     HashMap myMap = new HashMap(); 
     myMap.put("symbol", this.symbol); 
     final Object data = myMap; 
     return data; 
    } 
+1

如何殺死你的「最終」行,只是做「返回我的地圖」?一個HashMap畢竟是一個對象。 – jlarson 2010-09-04 03:49:31

回答

5

如果getLastNonConfigurationInstance()返回一個非空的對象,然後(HashMap) getLastNonConfigurationInstance()要麼返回相同的對象(如果該對象是一個HashMap)或揮動ClassCastException

您所描述的情況是不可能的,除非您發現了Java的演員操作符中的一個長期隱藏的錯誤。提示:你沒有。

確認getLastNonConfigurationInstance()實際上是返回一個非空對象。確認myMap實際上是空的。如果您使用調試器來檢查這些值,請嘗試將它們打印到控制檯。調試器有時會對你說謊,或者至少會誤導你。

+0

我已更新我的代碼以顯示onRetainNonConfigurationinstance() – 2010-09-04 03:14:08

+0

@Sheehan - 相關性是什麼? – 2010-09-04 03:15:41

+0

我不確定它爲什麼返回null。 – 2010-09-04 03:17:46

0

你還沒告訴我們這種情況發生在什麼情況下? onRetainNonConfigurationInstance()在Activity的onDestroy()發生配置更改時調用。

13

我面臨同樣的問題。看起來像在除了onCreate()之外的其他任何東西中調用getLastNonConfigurationInstance()都返回null。我把這個語句移到了onCreate()方法中,並且它返回了我期望它返回的結果。

+0

Yey,謝謝!在這上面打了我的頭。 – jfritz42 2012-01-13 23:44:44

+0

我在OnCreateOptionsMenu()中使用了getLastNonConfigurationInstance()並且它不爲空 – Noya 2012-09-18 13:37:53

+0

我在onCreate上調用一個Loader,並且在它返回時getLastNonConfigurationInstance()的值丟失。所以在onCreate上獲得並保留這個價值是一個很好的選擇 – Bostone 2012-12-21 18:07:32