比如说,我有一个做网络查询、接收数据和处理数据的活动,如果我不使用livemodel、持久化的主持人、DB或共享首选项,我将如何处理配置更改上的数据。一个变体实际上是一个带有包的新的分块,在配置更改之后,活动将用数据恢复片段,还有更多的建议吗?
按照下面的答案,可能是有用的,不要使用键和包,因为包lso有一个键。这里是你如何在科特林做到这一点
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)
}}
发布于 2018-07-07 02:20:24
这取决于您想要保存多久的数据。如果您希望它对于当前的应用程序会话是持久的,您可以使用单例。下面是一个使用Bundle的示例,但是您可以使用任何保存您所关心的数据的对象。下面是一个具有映射的示例,它允许您用唯一的字符串键设置不同的持久数据条目。
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),但是您不想使用这些方法,所以您必须编写自己的方法来读取和写入数据。
https://stackoverflow.com/questions/51217090
复制相似问题