【问题标题】:How to remove a specific item from ListView and SharedPreferences?如何从 ListView 和 SharedPreferences 中删除特定项目?
【发布时间】:2012-05-31 12:05:35
【问题描述】:

我将 History 项目(单词)保存到 SharedPreferences,并且 History 已很好地加载以在 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 还很陌生。非常感谢。

【问题讨论】:

    标签: java android listview sharedpreferences


    【解决方案1】:

    要清除共享偏好,请使用

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

    另外,如果我正确地回答了您的问题。要检查某个值是否存储在共享首选项中,请执行此操作

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

    【讨论】:

    • 非常感谢您。我的问题是如何定义theKey,这是从ListView 中删除的项目。此项可以是 ListView 中显示的任何单词。那么如何通知 SharedPreferences 这个项目呢?
    • 定义首选项键的值很简单。您使用editor.putString(key, value); 将键分配给值对吗?因此,正如上面的代码,我们正在检查首选项是否真的包含首选项/值。阅读此developer.android.com/reference/android/content/… 和此developer.android.com/reference/android/content/… 以获得更多说明。如果这对您有所帮助,请接受答案。谢谢
    • 虽然我还没有解决我的问题,但我认为这应该归咎于我有限的 Java 知识。无论如何,您的支持就是一个答案。谢谢。
    【解决方案2】:

    试试这个

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

    【讨论】:

    • @Dipak Keshariya:非常感谢。我想我的问题是如何定义"UserName"。我的意思是这里的 UserName 是从 ListView 中删除的项目,但删除的项目可以是列表中的任何单词。
    【解决方案3】:

    我找到了解决方案。 基本上,您要做的就是从列表视图中删除该特定项目,然后再次将更新后的列表添加到 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;
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 1970-01-01
      • 2017-09-11
      • 2014-10-29
      • 2011-06-09
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多