2

我正在使用 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 之间切换时,我不想从 FragmentActivity A 丢失我的 ListView 中的 CheckBox 项的状态,反之亦然。

4

7 回答 7

2

如果您想在应用启动时清除它们,为什么要使用共享首选项?

共享首选项是一种存储小首选项并稍后阅读它们的方法,例如设置。

您可以在您的活动中定义静态变量并在其他活动中读取它们。如果您确实想清除共享首选项,您应该在您的应用程序被终止后在启动时执行此操作。静态变量示例:

public static int i;
if(I want to set a value){
i = 1;
}

要在另一个活动中访问它:

if(MainActivity.i == 1){
//do something
}
于 2013-09-28T11:31:08.497 回答
1

清除那些在应用程序启动。对我来说同样的事情。

于 2013-09-28T11:19:51.027 回答
1

我不知道你是如何设置你的值的,SharedPreferences或者你为什么要声明它是静态的,因为它已经被调用Shared并且意味着,但我通常做的设置值是这样的:

Integer myValue=0;//some int value
SharedPreferences sp = getApplicationContext().getSharedPreferences("SomeFileName", Context.MODE_PRIVATE);
    Editor ed = sp.edit();
    ed.putInt("myKey", myValue);
    ed.commit();

并读回来:

SharedPreferences sp = getApplicationContext().getSharedPreferences("SomeFileName", Context.MODE_PRIVATE);
            Integer myValue= sp.getString("myKey", null);

要简单地清除文件 "SomeFileName" 中的值:

SharedPreferences sp = getApplicationContext().getSharedPreferences("SomeFileName", Context.MODE_PRIVATE);
            Editor ed = sp.edit();
            ed.clear().commit();

因此,请确保以SharedPreferences正确的方式清除文件onCreate(),我想它会起作用。

于 2013-09-28T14:01:43.133 回答
0

您无法清除 SharedPreferences 我的应用程序何时通过task manager.

于 2013-09-28T08:22:34.880 回答
0

您无法以编程方式清除共享首选项内容 - 您可以从应用程序管理器中清除您的应用程序数据,这是推荐的方式。

于 2013-09-28T10:45:00.127 回答
0

如果 SharedPreferences 数据位于不同的应用程序中...我不知道您如何访问它。首先,您可以使用 SQL 解决您的问题,然后您可以在任何活动中访问您的数据库,而不会出现任何问题。

其次,如果您不想在程序运行时杀死变量,但在程序退出时杀死它们,那么只需不要完成您不会丢失变量的活动。

您还可以进行活动 SingleInstance 这是一种 SingleTone

如果你必须,那就是你想要的工作方式......创建一个 SQL 列表并在主屏幕的 onDestroy() 上清除它

但我建议您阅读有关共享首选项以及何时使用它们的信息......因为似乎没有任何需要......

于 2013-09-28T10:46:34.037 回答
0

只需清除 onDestroy 和 onStop 方法中的值

override fun onStop() {
    //clear data here before super
    super.onStop()
}

override fun onDestroy() {
    //clear data here before super
    super.onDestroy()
}
于 2021-01-05T07:23:19.027 回答