我正在使用SharedPreferences在我的ListView中保存CheckBox项目的状态,以便在从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项的状态,反之亦然。
答案 0 :(得分:2)
如果要在应用启动时清除它们,为什么要使用共享偏好设置?
共享首选项是一种存储小偏好的方法,可以在以后读取,例如设置。
您可以在活动中定义静态变量,并在其他活动中阅读。如果您确实要清除共享首选项,则应在应用程序启动后启动它杀害。 静态变量的示例:
public static int i;
if(I want to set a value){
i = 1;
}
要在其他活动中访问此内容:
if(MainActivity.i == 1){
//do something
}
答案 1 :(得分:1)
清除应用启动时的内容。同样的事情。
答案 2 :(得分: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()
文件,我猜它会起作用。
答案 3 :(得分:0)
当我的应用被SharedPreferences
杀死时,你无法清除task manager
。
答案 4 :(得分:0)
您无法以编程方式清除共享首选项内容 - 您可以从应用程序管理器中清除应用程序数据,这是推荐的方法。
答案 5 :(得分:0)
如果SharedPreferences数据位于不同的应用中...我不知道如何达到它。 首先,您可以使用SQL解决您的问题,然后您可以在任何活动中访问您的数据库而不会出现任何问题。
第二,如果你不想在程序运行时杀死变量但是当它退出时杀死它们然后只是不完成你不会丢失变量的活动。
您还可以将活动SingleInstance设为SingleTone
如果你必须这就是你想要的工作方式......创建一个SQL列表并在主屏幕的onDestroy()上清除它
但我建议您阅读有关共享偏好设置以及何时使用它们...因为似乎没有任何需要......
答案 6 :(得分:0)
只需清除 onDestroy 和 onStop 方法中的值
override fun onStop() {
//clear data here before super
super.onStop()
}
override fun onDestroy() {
//clear data here before super
super.onDestroy()
}