可以说,我有一个活动,它可以进行网络查询,接收数据并对该数据进行某些操作,如何在不使用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)
}
}
答案 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),但您不想使用它们,因此必须编写自己的方法来读写数据。