【发布时间】:2013-09-28 08:11:38
【问题描述】:
我正在使用 SharedPreferences 将我的 CheckBox 项目的状态保存在我的 ListView 中,这样当我从 FragmentActivity A 切换到 FragmentActivity B 再切换回 FragmentActivity A 时,我不会丢失选中状态。我想清除我的 SharedPreferences 如果用户退出应用。
我的 SharedPreferences 在我的 BaseAdapter 类中初始化,如下所示:
private SharedPreferences sharedPreferences;
public static SharedPreferences.Editor editor;
我在 FragmentActivity A 中覆盖 onBackPressed() 方法并调用
MyBaseAdapter.editor.clear().commit();
如果用户通过单击后退按钮退出应用程序,我只能清除我的 SharedPreferences,但如果用户在应用程序运行时通过任务管理器终止应用程序,SharedPreferences 不会被清除。因此,当用户再次打开应用程序时,我的 ListView 中的 CheckBox 项目会被选中,这不应该被选中。当用户打开应用程序时,我的 ListView 中的 CheckBox 项目应该被取消选中。问题是如果我的应用在应用处于活动或运行状态时被用户通过任务管理器杀死,我该如何清除我的 SharedPreferences?
我尝试在 FragmentActivity A 上覆盖 onStop() 方法并调用
MyBaseAdapter.editor.clear().commit();
但是当我从 FragmentActivity A 导航到 FragmentActivity B 时,我的 SharedPreferences 被删除。当我在 FragmentActivity A 到 FragmentActivity B 之间切换时,我不想丢失我的 ListView 中的 CheckBox 项的状态,反之亦然。
【问题讨论】:
-
如果您不希望这些值被持久化,为什么要使用 SharedPreferences?如果您的应用程序被杀死,您将无法清除它们。
-
我的问题是成立的。如果您不想保存这些值,为什么要使用 SharedPreferences?
-
作为@Simon 评论的补充,如果您需要仅在会话期间保留一些值,那么您可以将它们存储在例如一些静态变量中。或者,您仍然可以使用 SharedPreferences,但每次应用程序启动时,清除 SharedPreferences。
-
好的,你还没有回答我的问题是“为什么”,而不是“为什么”。我猜你不想将任何值从你的应用程序的一个实例保存到另一个实例。 portabledroid.wordpress.com/2012/05/04/singletons-in-android 这可能是最简单的。就个人而言,我会使用片段之间共享的复选框列表或布尔值的并行数组来保留它们的检查状态,尽管这更难管理。
-
@Marss 看看我的回答
标签: android android-layout android-fragments android-activity