当前位置: 首页 > 知识库问答 >
问题:

如何从列表视图和共享首选项中删除特定项目?

游安康
2023-03-14

我将历史记录项(单词)保存到共享首选项,并且历史记录已很好地加载到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时,该项仍然存在。

我的问题是:我如何编写代码以从共享首选项中删除选定的项目?我的意思是如何从ListView和共享首选项中删除选定的项目?

如果你能根据我的代码提供说明,那就太好了,因为我对Android很陌生。谢谢您们。

共有3个答案

孙子民
2023-03-14

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

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;
        }
    });
艾哲
2023-03-14

试试这个

editor.remove("UserName");
editor.clear();
editor.putString("history",strHistory);   
editor.commit();
梁研
2023-03-14

要清除共享首选项,请使用

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

如果我答对了你的问题。要检查某个值是否储存在共享偏好设置中,请执行以下操作

SharedPreferences mySharedPrefs = getSharedPreferences("MyPreferences", 0);
                if(mySharedPrefs.contains("theKey")) {
SharedPreferences.Editor editor = settings.edit();
                editor.remove("thekey");
                editor.commit();
}
 类似资料:
  • 我在共享首选项中保存列表并将其显示在列表视图中没有问题,但我的问题是当我重新启动应用程序并尝试将项目添加到列表视图时 旧的存储项目已删除.有我的代码: } public void getDates(){

  • 当我发送FCM消息且应用程序处于后台时,我想清除共享首选项。在方法中,我正在调用一个方法来清除它们。 我得到以下错误: 未处理的异常:MissingPluginException(在channel plugins.flatter.io/shared_首选项上找不到方法getAll的实现)

  • 你好。我需要帮助。我想用SharedPreferences在Listview中保存动态添加的项目。我正在添加带有公共void favekle函数的listview项目。我正在向数组列表添加条目

  • 对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?

  • 非常感谢您的光临,我正在为学校开发一个应用程序,我遇到了另一个问题。该应用程序的主要思想是跟踪您的卡路里,我希望它能节省卡路里,所以当应用程序关闭时,它仍然会记住他们。我已经忙了一段时间了,现在尝试使用SavedPreferences,但我总是出现错误。我希望有人能帮我。 } 我可能做了很多明显的愚蠢的事情,但我真的弄不明白。 多谢!

  • 问题内容: 我有创建元素的代码。我需要单击一次删除一个元素。对于每个元素,我都有。我了解我需要一些功能来通过删除项目。如何使用此功能删除ReactJS中的元素?我的代码: 问题答案: 您正在父级组件中管理数据并在子级组件中呈现UI,因此要从子级组件中删除项目,您需要将一个函数与数据一起传递,从子级中调用该函数并在父级组件内部传递列表项的任何唯一标识符使用该唯一标识符删除项目。 步骤1: 将父组件的