【问题标题】:Clearing all sharedprefs from menu从菜单中清除所有共享首选项
【发布时间】:2016-02-03 20:07:09
【问题描述】:

我一直在努力在 3dot(溢出)菜单中实现“明确偏好”选项...此处的示例屏幕截图:

明智的编码...我试过了,但它不起作用:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

if (id == R.id.clearsp) {
            SharedPreferences preferences = getSharedPreferences("dyna_cb_prf", 0);
            preferences.edit().clear().commit();
            Intent i = new Intent(Intent.ACTION_VIEW);
            startActivity(i);
        }

        return super.onOptionsItemSelected(item);

关于如何修改的提示?基本上,我希望它在单击该选项时清除所有共享首选项(有时我可能需要清除多个 xml 文件)

【问题讨论】:

  • 我在发布之前尝试过,但它只会触发一个选择应用程序对话框...我的代码是:if (id == R.id.clearsp) { getSharedPreferences("dyna_cb_prf", 0) .edit().clear().commit();意图 i = new Intent(Intent.ACTION_VIEW);开始活动(一); }
  • 不,问题是我无法让菜单项触发删除。我在菜单项的主要帖子中有一个屏幕截图......我基本上想点击它并清除所有共享首选项
  • 是的,它对其他菜单项(它们是 URL)非常有效
  • 我认为我的问题是我必须调用意图.. 但我不确定如何。看看这个:i.imgur.com/uTugJ41.png

标签: android android-layout android-fragments android-intent


【解决方案1】:

一种解决方案是创建一个 SharedPreferencesManager 类,该类跟踪所有不同的 SharedPreference xml 文件,并有一种方法将它们全部清除。

具有两种类型 SharedPreferences 的简单示例:

public class SharedPreferencesManager {

    public static SharedPreferences forDynaCpPrf(Context ctx) {
        return ctx.getApplicationContext().getSharedPreferences("dyna_cb_prf", 0);
    }

    public static SharedPreferences forSomethingElse(Context ctx) {
        return ctx.getApplicationContext().getSharedPreferences("something_else", 0);
    }

    public static void clearAllSharedPreferences(Context ctx) {

        forDynaCpPrf(ctx).edit().clear().commit();
        forSomethingElse(ctx).edit().clear().commit();
    }
}

然后,如果用户选择了清除首选项的菜单项,只需调用clearAllSharedPreferences()方法:

if (id == R.id.clearsp) {
  SharedPreferencesManager.clearAllSharedPreferences(this);
}

请注意,您只需调用 forDynaCpPrf() 方法,而不是在 SharedPreferencesManager 类之外调用 getSharedPreferences("dyna_cb_prf", 0)

SharedPreferences preferences = SharedPreferencesManager.forDynaCpPrf(this);

【讨论】:

  • 谢谢,我试试这个。我也可以这样做吗? i.imgur.com/PPXm3MO.png
  • @Adam,是的,这会起作用,但如果你没有在集中式课堂上使用它,它最终会变得一团糟。例如,如果您有 10 个 SharedPreference xml 文件,则无论何时要删除所有文件,都将是 10 行代码,而不仅仅是 1 行。
  • 是的,完全同意。您的解决方案更有条理。我会选择那个,但只是想检查两者是否都可以工作:) 非常感谢!
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多