首页 > 解决方案 > 有没有办法从 sharedpreferences 中删除项目?

问题描述

我有一个导航视图,我在其中以编程方式添加项目并保存它们以恢复以后的共享首选项。

我的问题是:当我长按导航视图中的特定项目时,如何从共享首选项中删除特定项目?

这是我的代码:

    private void saveData() {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_LIST_KEY, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    Gson gson = new Gson();
    String json = gson.toJson(navItems);
    editor.putString(SHARED_PREF_LIST_KEY_ITEM, json);
    editor.apply();
}

    private void loadData() {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_LIST_KEY, MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sharedPreferences.getString(SHARED_PREF_LIST_KEY_ITEM, null);
    Type type = new TypeToken<ArrayList<NavItem>>() {
    }.getType();
    navItems = gson.fromJson(json, type);
    if (navItems == null) {
        navItems = new ArrayList<>();
    }
}

public class NavItem {
private String name;

public NavItem(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

}

标签: androidsharedpreferencesnavigation-drawernavigationview

解决方案


您可以创建一种新方法来删除特定项目,并在删除项目后将更新的列表保存回共享首选项。

看下面的例子:

private void deleteData(NavItem item) {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_LIST_KEY, MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sharedPreferences.getString(SHARED_PREF_LIST_KEY_ITEM, null);
    Type type = new TypeToken<ArrayList<NavItem>>() {
}.getType();
    navItems = gson.fromJson(json, type);
    if (navItems! = null) {
        navItems.remove(item);
        saveData() ;// save the updated list to shared preferences 
    }
}

它有帮助。


推荐阅读