【问题标题】:How do you delete a sharedPreference by clicking on a listView item?如何通过单击 listView 项目删除 sharedPreference?
【发布时间】:2014-06-27 16:22:09
【问题描述】:

我创建了一个将共享首选项显示为字符串的列表。我是这样创建的...

adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listItems);
setListAdapter(adapter);


if (sharedpreferences.contains(Name0)) {
    String prefs = sharedpreferences.getString(Name0, "");
    listItems.add(prefs);
}

等等其他偏好。我正在尝试弄清楚如何删除列表项,以及共享首选项以及它。我不知道是否应该使用 onClick 侦听器,或者列表中的删除按钮,或者我可能还没有读过的其他方法。我想让它对用户来说非常简单和直观。

所以我的问题是,如何编辑现有代码以删除列表项及其显示的首选项。感谢您的帮助。

【问题讨论】:

  • 如何决定删除列表视图项取决于您:) 但是要删除相应的共享首选项,您可以调用 sharedpreferences.edit().remove(Name0).commit();跨度>
  • 一个建议是使用 setTag()。例如,将 name0 放在用于删除列表项的按钮的标签上。然后在 onClickListener() { onClick(View v) { ... } } 中,您可以使用 v.getTag() 来“识别”该按钮并删除共享首选项。如果您在列表视图适配器中附加 onClickListener,请不要在初始化 convertView (convertView == null) 的位置设置标签,因为这样会附加错误的名称。
  • 好的,所以为了使用您描述的这种方法,我必须为每个列表项使用一个单独的按钮,这样我可以使用 setTag() 将参数发送到我的 onClickListener? @Losin'Me
  • 您有多种选择如何删除列表项。如您所述,您可以添加Button。另一种常见的方法是使用一个项目长时钟来调出一个菜单,您可以从中删除它。为此使用onCreateContextMenu()。如果您想要真正复杂,您可以让用户向左滑动该项目以将其删除。不过,你必须用谷歌搜索这个。
  • 顺便说一句:不要将commit() 用于 UI 线程中的共享首选项,因为它是阻塞的。请改用apply(),即异步。

标签: android listview android-listview sharedpreferences android-adapter


【解决方案1】:

这是我在周末发现的,它需要一个共享的偏好,它有两个用逗号分隔的值。前任。 (Wifiname_SSID,约翰的 Wifi)。然后,它拆分共享首选项值,并检查共享首选项值是否与存储在列表中的字符串匹配。如果共享首选项与单击的列表项匹配,则删除该项目。

adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, listItems);
lv = (ListView) findViewById(android.R.id.list);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> a, View v, int position,
            long id) {
        AlertDialog.Builder adb = new AlertDialog.Builder(
                NicknamePrefs.this);
        adb.setTitle("Delete?");
        adb.setMessage("Are you sure you want to delete \n"
                + adapter.getItem(position));
        final int positionToRemove = position;
        adb.setNegativeButton("Cancel", null);
        adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                String item = adapter.getItem(positionToRemove);
                List<String> items = Arrays.asList(item
                        .split("\\s*,\\s*"));
                adapter.remove(adapter.getItem(positionToRemove));

                String prefs1 = sharedpreferences.getString(Name0, "");
                List<String> items1 = Arrays.asList(prefs1
                        .split("\\s*,\\s*"));


                if (item.contains(items1.get(0))
                        || item.contains(items1.get(1))) {
                    sharedpreferences.edit().remove(Name0).apply();
                }

                adapter.notifyDataSetChanged();
            }
        });
        adb.show();
    }
});

【讨论】:

    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多