getLastNonConfigurationInstance()

Jim*_*y D 1 android

简而言之,我必须开发一个小应用程序,在应用程序启动时显示随机图像.我很快发现,当设备方向改变时,重新加载主要活动并选择新图像.这个网站上有人通过在外面声明一个空图像来帮助我解决这个问题OnCreate(),然后在里面OnCreate()我有这个:

image = (Bitmap) getLastNonConfigurationInstance();

    if (image == null) {
        image = getRandomImage();
    }
    setRandomImage(image);
Run Code Online (Sandbox Code Playgroud)

这很好用.我现在的问题是我必须在应用程序中添加一个随机的"当天报价",我无法完成这项工作.当设备方向改变时,将拉出新的报价.我认为以下可能会有效,但它不会:

message = (String) getLastNonConfigurationInstance();

    if (message == null) {
        message = getRandomMessage();
    }
    setRandomMessage(message);
Run Code Online (Sandbox Code Playgroud)

我可能只是不理解它是如何getLastNonConfigurationInstance()工作的,所以如果有人可以帮助我,我会很感激.

Pet*_*ego 11

getLastNonConfigurationInstance() 将为您提供返回的对象 onRetainNonConfigurationInstance()

您只能使用此机制保存/检索一个对象.因此,只需将消息和图像包装在另一个类中并使用它.

更新:

public class ConfigWrapper{
    public Bitmap image;
    public String message;
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

ConfigWrapper config = (ConfigWrapper) getLastNonConfigurationInstance();

if(config == null || config.image == null ){ 
    image = getRandomImage();
} else {
    image = config.image;
}
setRandomImage(image);
Run Code Online (Sandbox Code Playgroud)

然后在你的onRetainNonConfigurationInstance():中创建配置:

onRetainNonConfigurationInstance(){
     ConfigWrapper config = new ConfigWrapper();
     config.image = // get last image from where you have it
     config.message = // get last message 
     return config;
}
Run Code Online (Sandbox Code Playgroud)