2016-03-07 109 views
0

我在我的sharedPrefs中有一組字符串。我想刪除列表中的特定項目從SharedPreferences中刪除特定項目

<set name="items"> 
<string>217372223</string> 
<string>222015066</string> 
<string>217771052</string> 
<string>220431322</string> 

所以我想刪除說,217372223,但保留其餘?

回答

1

您可以使用SharedPreferences.Editor

SharedPreferences sharedPreferences = context.getSharedPreferences("items", Context.MODE_PRIVATE); 
sharedPreferences.edit().remove(String key).commit(); 

remove(String key)方法確保您的項目有一個鍵。嘗試是這樣的:

<string name="keyToDelete">217372223</string> 

然後

sharedPreferences.edit().remove("keyToDelete").commit(); 
+0

如果我使用 preferences.edit()。remove(「items」)。commit(); 這會刪除整個列表嗎? – x10sion

+0

@ x10sion在這種情況下,最好使用'clear()',它將刪除** all **首選項。 – user1301428

+0

爲什麼在上面的例子中使用「String key」? – x10sion

0
/** 
    * Deletes a particular value or FULL Set from shared preferences. 
    * 
    * @param key 
    */ 
    public static void deleteValueInPreferences(Context context, String key) { 
    SharedPreferences sp = context.getSharedPreferences(SHARED_PREF_FILE_NAME, MODE_PRIVATE); 
    if (sp.contains(key)) { 
     sp.edit().remove(key).apply(); 
    } 
    } 

    /** 
    * Deletes a particular value in Set from shared preferences. 
    * 
    * @param key 
    */ 
    public static void deleteSingleValueInSetInPreferences(Context context, String key, String value) { 
    Set<String> aSetOfExistingStrings = getStringArrayFromPreferences(context, key); 
    deleteValueInPreferences(context, key); 
    Set<String> aNewSetOfExistingStrings = new HashSet<String>(); 
    aNewSetOfExistingStrings.addAll(aSetOfExistingStrings); 
    aNewSetOfExistingStrings.remove(value); 
    setStringArrayIntoPreferences(context, key, aNewSetOfExistingStrings); 
    } 
    /** 
    * @param context 
    * @param key - Set Key 
    * @param keyValueMap - Set Key List 
    */ 
    public static void setStringArrayIntoPreferences(Context context, String key, Set<String> keyValueMap) { 
    SharedPreferences sp = context.getSharedPreferences(SHARED_PREF_FILE_NAME, MODE_PRIVATE); 
    for (String s : keyValueMap) { 
    } 
    sp.edit().putStringSet(key, keyValueMap).apply(); 
    } 

我這是怎麼了進來,我遇到的問題。我從SharedPrefs複製Set,刪除了我想刪除的項目,從SharedPrefs中刪除整個集合,然後重新添加集合減去我想刪除的項目。