2016-02-13 105 views
0

我有喜歡的列表;Android SparseArray刪除

private static SparseArray<MFavori> liste = new SparseArray<>(); 

而我存儲這個sharedpreferencefiles;

myactivity() 
     .getSharedPreferences("favori", Context.MODE_PRIVATE) 
     .edit() 
     .putString(String.valueOf(key), new Gson().toJson(value)) 
     .apply(); 

但是,當我我最喜愛的名單上刪除對象保存sharedpreference後。加載後,然後我顯示刪除鍵(因爲稀疏陣列刪除代碼不刪除鍵),並且此鍵具有空值> {} ...

我調試我的應用程序,我顯示此;

之前刪除sparsearray-i顯示了兩個鍵和兩個值(正常)

Before deleting

但是當我刪除的對象在我的收藏夾列表-i顯示了這幅畫;

liste.remove(keyID); 

此代碼後刪除值,但我顯示已存儲的密鑰。爲什麼?它爲我,因爲問題的時候保存這個名單與負荷後GSON i顯示了空數據{},但有鍵,以便其對我的問題..

After deleting

索裏我的英文不好..

+0

在調用remove()時keyID是什麼?你能展示更多的代碼嗎?我很難理解你想要做什麼。 –

+0

在第一個列表中有兩個項目10391和10392.當我刪除id> list.remove(10392);並調試我顯示第二個屏幕。 10392鍵已經存儲但值刪除(鍵不刪除)。 – kibar

+0

讓你的物品按這個ID排序很重要嗎?如果沒有,你可以使用一個HashMap來代替它,它可能更適合這種用途? –

回答

0

它看起來像這樣按預期工作。 SparseArray.remove()的來源使用默認對象重置映射到'keyID'的項目的值,並設置一個標誌來指示需要垃圾收集。文檔沒有提到關於刪除密鑰和價值的任何信息。從SparseArray.remove()調用的刪除方法:

/** 
* Removes the mapping from the specified key, if there was any. 
*/ 
public void delete(int key)