2012-11-15 41 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();