如何从ListView和SharedPreferences中删除特定项?

时间:2012-05-31 12:05:35

标签: java android listview sharedpreferences

我将历史记录项(单词)保存到SharedPreferences,并且可以很好地加载历史记录以在ListView中查看。然后,我使用这些代码行从ListView中删除特定项目:

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.edit:
            editNote(info.id);
            return true;
        case R.id.delete:
            String content = (String) mLSTHistory.getItemAtPosition(info.position);
               aptList.remove(content);
               aptList.notifyDataSetChanged();
            deleteNote(info.id);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
private void deleteNote(long id) {
    // TODO Auto-generated method stub
    if (prefs.getBoolean("saveHistory", true) && mWordHistory != null && mWordHistory.size() >= 1)

    prefs =   PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    StringBuilder sbHistory = new StringBuilder();
    for (String item : mWordHistory)
    {
        sbHistory.append(item);
        sbHistory.append(",");

    String strHistory = sbHistory.substring(0, sbHistory.length()-1);
    SharedPreferences.Editor editor = prefs.edit();
    //editor.remove(content);
    editor.putString("history", strHistory);
    editor.commit();
    }
}
private void editNote(long id) {
    // TODO Auto-generated method stub

}

从ListView中定义删除所选项目,但不会从保存它的SharedPreferences中删除它。因此,当重新加载Listview时,该项目仍然存在。

我的问题是:如何编码以从SharePreferences中删除所选项目?我的意思是如何从ListView和SharedPreferences中删除所选项目?

如果您可以根据我的代码提供说明,那就太好了,因为我对Android很新。非常感谢你。

3 个答案:

答案 0 :(得分:4)

要清除共享偏好,请使用

editor.clear();
editor.commit();

如果,我的问题是正确的。要检查值是否存储在sharedpreferences中,请执行此操作

SharedPreferences mySharedPrefs = getSharedPreferences("MyPreferences", 0);
                if(mySharedPrefs.contains("theKey")) {
SharedPreferences.Editor editor = settings.edit();
                editor.remove("thekey");
                editor.commit();
}

答案 1 :(得分:2)

试试这个

editor.remove("UserName");
editor.clear();
editor.putString("history",strHistory);   
editor.commit();

答案 2 :(得分:0)

我找到了解决方案。 基本上,您需要做的是从列表视图中删除该特定项目,然后再次在 sharedpreference 中添加该更新后的列表,以便它覆盖共享首选项。

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
            addPlace.remove(i);
            
            arrayAdapter.notifyDataSetChanged();
            try {
                sharedPreferences.edit().putString("places", ObjectSerializer.serialize(MainActivity.addPlace)).apply();  add the updated shared pref again that will override previous saved.

            } catch (IOException e) {
                e.printStackTrace();
            }


            return false;
        }
    });