我有一个动态ui,用户可以在其中添加和删除元素。比onPause我在SharedPreferences上保存ui的当前状态(字符串,整数等),以便稍后在onResume()调用中重新创建ui。
protected void onResume(){
SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
Map<String, String> savedTimers = (Map<String, String>) prefs.getAll();
if(savedTimers.size() > 0){
for(int i=0; i<savedTimers.size(); i++){
// retrieve the info saved on the prefs
// and do stuff with those (reload a dynamic gui basically)
...
//remove the timer from the prefs
editor.remove(String.valueOf(i));
}
editor.commit();
}
}
但是,即使用户从ui中删除了一些元素,在对onResume的后续调用中也会忽略这一点。
所以我想说我有3个TextView。然后我关闭应用程序并再次打开它。正如所料,我有3个TextViews。
但如果我删除一个(或两个或全部)然后关闭并启动应用程序,那么我仍然有三个TextView。 lgos确认我是onResume的问题。
我的代码逻辑中是否有错误?
编辑:根据请求,这是保存的逻辑:
protected void onPause(){
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
for (int i=0; i<container.getChildCount()-1; i++){
// bla bla bla other code
editor.putString(String.valueOf(i), "bla bla bla");
}
editor.commit();
}
P.S。 现在我很好奇关于@ksarmalkar的ID的评论
答案 0 :(得分:0)
您是否可以将首选项用作整数,其中值表示文本视图的数量?
在您的onresume中,只需询问偏好中的数字。
在这种情况下,您无需删除,询问长度或需要全部检索它们。
如果在onresume和主类中声明Prefs,也可能会发生冲突。我根本不会在onresume中声明它。
答案 1 :(得分:0)
找到了问题所在。
在屏幕旋转的情况下,我也保存了prefs。所以在轮换之后,我从传递给onRestoreInnstanceState()的包中重新创建了gui,而相同的信息存储在共享的首选项中。
在onPause()alloes上添加isFinishing()的测试基本上跳过onPause()中的代码,因此没有存储prefs,