在我的活动中,我想使用'onRetainNonConfigurationInstance'方法来存储我在活动中加载的一些数据(没有视图)。这可以加快加载速度并在方向改变时保持一致状态。
由于return参数是一个Object,我想返回两个项目,我想出了以下解决方案:
@Override
public Object onRetainNonConfigurationInstance() {
HashMap< String, Object> data = new HashMap<String, Object>();
data.put( "mAdapter", getExpandableListAdapter() );
data.put( "folderList", folderList );
return data;
}
当我使用以下方法收集onCreate方法中的数据时:
HashMap<String, Object> savedData = ( HashMap< String, Object> ) getLastNonConfigurationInstance();
我从编译器得到一个未经检查的强制警告。我假设这是因为编译器无法确定具有指定类型的HashMap是否实际上将在getLastNonConfigurationInstance的Object返回中。然后我将HashMap中的Objects转换为正确的数据类型。我的问题是:
当我知道数据将以HashMap的形式返回时(因为我将其存储在那里),这是一种将多个数据传递回onCreate的安全方法吗?
我想我可以使用@SuppressWarnings(“未选中”)来抑制警告,但我想确保我的代码有效。
亲切的问候, IVO
答案 0 :(得分:2)
在编译时知道完整的内容集时,为什么要使用hashmap而不是简单的类似struct的类?
另外,请注意在此类活动实例之间传递任何包含Context / Activity引用的内容。有可能你传递的适配器拥有一个Context引用,这样它就可以获得一个LayoutInflater来扩展项目视图。这将产生两个负面影响:
这就是该方法被称为“非配置实例”的原因。返回不受配置影响的对象是正确的。在类似于包含上下文的适配器的情况下,传递适配器访问的数据而不是适配器本身,并在新的活动实例中创建新的适配器。