活动中的新数据接收配置更改

时间:2018-07-06 20:17:40

标签: android kotlin

可以说,我有一个活动,它可以进行网络查询,接收数据并对该数据进行某些操作,如何在不使用livemodel,持久性演示者,数据库或共享首选项的情况下保留配置更改中的数据。一个变体实际上是一个带有捆绑的新碎片,在配置更改后,活动将恢复包含数据的碎片,是否还有其他提示?

下面的答案可能很有用,不要使用key和bundle,因为bundle lso持有密钥。这是您在Kotlin中可以做到的方式

object DataHolder {

private val data = HashMap<String, Any>()

fun setData(key: String, data: Any) {
    this.data[key] = data
}

fun getData(key: String): Any? {
    return data[key]
}

fun removeData(key: String) {
    data.remove(key)
}

}

1 个答案:

答案 0 :(得分:0)

这取决于您想要保留数据多长时间。如果您希望它仅在当前应用会话中保持不变,则可以使用单例。这是一个使用Bundle的示例,但是您可以使用任何保存所需数据的对象。这是一个带有映射的示例,可让您使用唯一的String键设置不同的持久数据条目。

public class MyDataHolder  {

    private static MyDataHolder instance = new MyDataHolder();

    private final HashMap<String,Bundle> data = new HashMap<>();

    private MyDataHolder() {};

    public static MyDataHolder getInstance() {
       return instance;
    }

    public void setData(String key, Bundle data) {
        this.data.put(key,data)
    }

    public Bundle getData(String key) {
        return data.getOrDefault(key, null);
    }
}

然后在您的活动中保存一些数据

MyDataHolder holder = MyDataHolder.getInstance();
holder.setData("ActivityB",data);

并获取数据(例如,在onCreate中)

MyDataHolder holder = MyDataHolder.getInstance();
Bundle data = holder.getData("ActivityB");
if( data != null ) {
    // use saved config
}
else {
    // use default config
}

如果您需要它在当前应用程序会话之后继续存在,或者即使该应用程序被杀死也要继续存在,则需要将其保存到本地文件或网络位置。可以是内置方法(DB,SharedPreferences),但您不想使用它们,因此必须编写自己的方法来读写数据。