长话短说,我必须开发一个小应用程序,在应用程序启动时显示随机图像。我很快发现,当设备方向改变时,重新加载主要活动并选择新图像。这个网站上有人通过在OnCreate()
之外声明一个空图像帮助我解决了这个问题,然后在OnCreate()
内部我有这个:
image = (Bitmap) getLastNonConfigurationInstance();
if (image == null) {
image = getRandomImage();
}
setRandomImage(image);
这很好用。我现在的问题是我必须在应用程序中添加一个随机的“当天报价”,我无法完成这项工作。当设备方向改变时,将拉出新的报价。我认为以下可能会有效,但事实并非如此:
message = (String) getLastNonConfigurationInstance();
if (message == null) {
message = getRandomMessage();
}
setRandomMessage(message);
我可能只是不明白getLastNonConfigurationInstance()
是如何运作的,所以如果有人可以帮助我,我会很感激。
答案 0 :(得分:11)
getLastNonConfigurationInstance()
将为您提供onRetainNonConfigurationInstance()
您只能使用此机制保存/检索一个对象。因此,只需将消息和图像包装在另一个类中并使用它。
更新
public class ConfigWrapper{
public Bitmap image;
public String message;
}
然后使用它:
ConfigWrapper config = (ConfigWrapper) getLastNonConfigurationInstance();
if(config == null || config.image == null ){
image = getRandomImage();
} else {
image = config.image;
}
setRandomImage(image);
然后在onRetainNonConfigurationInstance()
:
onRetainNonConfigurationInstance(){
ConfigWrapper config = new ConfigWrapper();
config.image = // get last image from where you have it
config.message = // get last message
return config;
}