getLastNonConfigurationInstance

getLastNonConfigurationInstance

长话短说,我必须开发一个小型应用程序,该应用程序在启动时会显示随机图像。我很快发现,当设备方向发生变化时,将重新加载主要活动并选择一个新图像。这个站点上的某人通过在OnCreate()之外声明一个空图像,然后在OnCreate()里面声明了一个空图像,帮助我解决了这个问题:

image = (Bitmap) getLastNonConfigurationInstance();

    if (image == null) {
        image = getRandomImage();
    }
    setRandomImage(image);


这很好。我现在的问题是,我必须在应用程序中添加随机的“每日报价”,但我无法完成这项工作。设备方向更改时,将拉出新的报价。我认为以下方法可能会起作用,但不会:

message = (String) getLastNonConfigurationInstance();

    if (message == null) {
        message = getRandomMessage();
    }
    setRandomMessage(message);


我可能只是不了解getLastNonConfigurationInstance()的工作原理,所以如果有人可以帮助我,我将不胜感激。

最佳答案

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;
}

关于android - getLastNonConfigurationInstance(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5994801/

10-11 22:31