从列表视图中删除项目会遇到麻烦

时间:2014-07-06 21:31:49

标签: java android listview

所以,我正在学习Android开发,几周前我开始了我的第一个项目。从那时起,我遇到了一些障碍,但我已经超越了它们。这个是不同的。

我试图这样做,当用户触摸并按住列表视图中的某个项目时,会弹出一个对话框,询问他们是否确定并点击是单击它将删除该项目。很简单吧?

这是我的代码:

//passwordList is a Set<String> and so is passList
final Set<String> passwordList = mPrefs.getStringSet("pass", new HashSet<String>());
if (passwordList != null) {
        passList = passwordList;
        listFinal = passList.toArray(new String[passList.size()]);
        list2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listFinal);
        passwordListView.setAdapter(list2);
        //onClickListener for the main list
        passwordListView.setLongClickable(true);
        passwordListView.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View strings, final int i, long l) {


                AlertDialog.Builder deleteConf = new AlertDialog.Builder(main.this);
                final int positionToRemove = i;

                deleteConf.setTitle("Delete Password?");
                deleteConf.setMessage("Are you sure you want to delete the password '" +listFinal[i] +"'?");

                deleteConf.setNegativeButton("No", null);
                deleteConf.setPositiveButton("Yes", new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int w) {
                        Log.d("dialog", "Pressed YES");
                        passwordList.remove(positionToRemove);
                        ArrayList<String> list = new ArrayList<String>(Arrays.asList(listFinal));
                        //Is this right?
                        passList.remove(positionToRemove);
                        //Or this one?
                        list.remove(positionToRemove);
                        list2.notifyDataSetChanged();
                        list2.notifyDataSetInvalidated();


                    }
                });
                deleteConf.show();
                return false;

            }
        });
    }

我觉得我没有从正确的数组中删除该项目。由于Adapter源设置为listFinal,我应该从那里删除该项目吗?但它不会让我调用listFinal.remove(positionToRemove);

任何人都可以帮我弄清楚这里有什么问题吗?对话框显示但是当我点击是没有任何反应。它知道我按了yes(因此log.d按YES)但该项永远不会删除。

2 个答案:

答案 0 :(得分:1)

我注意到的第一件事是你有2个对象:list和list2以及你调用 list.remove(); list2.notifyDataSetChanged();

我没有看到其余的代码,但可能就是这种情况。

答案 1 :(得分:0)

listFinal应该是一个ArrayList而不仅仅是一个数组