HashMap myMap = (HashMap) getLastNonConfigurationInstance();
myMap始终为null。 getLastNonConfigurationInstance()返回一个对象。我的地图有两个键“symbol”和“name”。
public Object onRetainNonConfigurationInstance()
{
HashMap myMap = new HashMap();
myMap.put("symbol", this.symbol);
final Object data = myMap;
return data;
}
答案 0 :(得分:13)
我遇到了同样的问题。看起来在onCreate()之外的任何东西中调用getLastNonConfigurationInstance()都会返回null。我将语句移动到onCreate()方法并且瞧..它返回了我期望它返回的内容。
答案 1 :(得分:5)
如果getLastNonConfigurationInstance()
返回非空对象,则(HashMap) getLastNonConfigurationInstance()
将返回相同的对象(如果该对象为HashMap
),或者抛出ClassCastException
。
您描述的情况是不可能的,除非您在Java的强制转换操作符中发现了一个长期隐藏的错误。提示:你还没有。
验证getLastNonConfigurationInstance()
实际上是否返回了非null对象。验证myMap
实际上是否为空。如果您使用调试器来检查这些值,请尝试将它们打印到控制台。调试器有时可能骗你,或至少误导。
答案 2 :(得分:0)
你有没有告诉我们这种情况发生在什么情况?当配置发生更改时,在Activity的onDestroy()之前调用onRetainNonConfigurationInstance()。
答案 3 :(得分:0)
getLastNonConfigurationInstance()
将返回保存在onRetainNonConfigurationInstance()
方法中的引用。
onRetainNonConfigurationInstance()
方法将在onStop
和onDestroy
之间调用,如果发生任何配置更改,则可以在其中保存任何对象引用。
活动会保留此引用,直到onResume
调用为止。
Activity.class
final void performResume(boolean followedByPause, String reason) {
...
mLastNonConfigurationInstances = null; // clearing reference
...
mInstrumentation.callActivityOnResume(this); // onResume
}