2012-11-15 40 views
2

我有一個列表視圖,這些將從共享首選項加載。當用戶點擊刪除時,它應該從列表和碎片偏好中刪除。我的問題是,在特定項目不從共享偏好刪除,爲此,我使用下面的代碼,Android - 從共享首選項刪除鍵值對

SharedPreferences settings = getSharedPreferences(
OptionsActivity.PREFS_NAME, 0); 
int deviceSize = settings.getInt("deviceSize", 0); 
SharedPreferences.Editor editor = settings.edit(); 
String deviceName = items.get(index); 
editor.remove(deviceName + String.valueOf(items.get(index))); 
editor.remove("deviceName" + String.valueOf(index)); 
int deviceid = settings.getInt("deviceId"+String.valueOf(items.get(index)),0); 
editor.remove("deviceId" + String.valueOf(deviceid)); 
editor.putInt("deviceSize", deviceSize - 1); 
editor.commit(); 

通過這個代碼僅deviceSize-1工作,所以它似乎是從列表中刪除,但是當我看到共享的首選項文件,不是。 我的共享首選項文件是低於,

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
    <map> 
    <string name="deviceName1">APPLE</string>//delete when click on delete 
    <int name="deviceId1" value="0" /> //delete when click on delete 
    <int name="deviceSize" value="1" /> //decrease by one when item deleted 
    </map> 
當用戶點擊刪除我想刪除這些三線

形式的偏愛文件。如何刪除整行?該列表只顯示名稱(APPLE)。

+0

你怎麼叫'提交()'後? –

+0

這將是代碼的最後一行。 Brinda。請說明如何設置索引和項目。你也在濫用sharedPreferences。這應該在SQLite中完成。由於您試圖爲關係數據使用非關係數據存儲,因此您將始終遇到此代碼的問題。 – Simon

+0

@Fess是的,我用了commit()。 –

回答

5

有錯誤就行:

editor.remove("deviceId" + String.valueOf(deviceid)); 

應該

editor.remove("deviceId" + String.valueOf(index)); 

也許你也想去掉deviceSize鍵:commiting前

editor.remove("deviceSize"); 

你的代碼不是很清楚。使其更具可讀性。

+0

我不想刪除deviceSize,我應該只減少項目被刪除時的值。其實它的工作,但這些deviceName和Ids不刪除。我試圖改變deviceId索引,但沒有工作。 –

0

你可以嘗試:

settings.edit().remove("deviceId" + String.valueOf(deviceid)).apply();