列表视图在长按删除项目时出错

时间:2018-02-24 02:46:10

标签: java android

Visual Reference

EDITED WITH COMMENT FIX

我的listView应该在长按时删除你点击的内容。 sharePreferences中有数据,因此不应该是问题。所以,我正在做的是我从noteSet获取数据,它从myPref获取。然后,在单击listView的位置,notesSet将删除该注释。然后,它将修改后的notesSet重新上载到sharedPreferences,然后将notesSet添加到注释中,由listview使用。

我认为这是我得到的错误代码:

02-23 12:20:12.384 5211-5229 / com.example.jackson.collegeplanner E / OpenGLRenderer:GL错误:GL_INVALID_OPERATION

02-23 12:20:28.461 550-710 / system_process W / InputDispatcher:channel'17b2c24b com.example.jackson.collegeplanner / com.example.jackson.collegeplanner.Schedule(server)'〜消费者关闭输入通道或发生错误。事件= 0x9

02-23 12:22:12.723 54-54 /? E / EGL_emulation:tid 54:eglCreateSyncKHR(1299):错误0x3004(EGL_BAD_ATTRIBUTE)

    myPref.edit().putStringSet("NN", notesSet).apply();

    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {

            new AlertDialog.Builder(getApplicationContext()).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Pop Up!")
                    .setMessage("Ready to delete this task?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {

                            SharedPreferences myPref = getApplicationContext().getSharedPreferences("com.example.jackson.collegeplanner", Context.MODE_PRIVATE);
                            Set<String> notesSet = new HashSet<String>(myPref.getStringSet("NN", null));
                            ArrayAdapter arrayAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, notes);
                            ListView listView = (ListView) findViewById(R.id.listView);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                            notesSet.remove(i);
                            notes.clear();

                            notes.addAll(notesSet);

                            myPref.edit().putStringSet("NN", notesSet).apply();

                            listView.setAdapter(arrayAdapter);
                            Log.i("TEST", "notesSet didn't return null!");

                        }
                    })
                    .setNegativeButton("No", null).show();



            return false;
        }
    });

这是我的节目代码的一小段代码。程序的其余部分工作,只有在我介绍这个新代码时才会发生应用程序崩溃。谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

使用Acivity的上下文而不是getApplicationContext()。除非意图使用,否则请勿在任何地方使用getApplicationContext()。请按以下步骤操作。

  new AlertDialog.Builder(YourActtivity.this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Pop Up!")
            .setMessage("Ready to delete this task?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    SharedPreferences myPref = getSharedPreferences("com.example.jackson.collegeplanner", Context.MODE_PRIVATE);
                    Set<String> notesSet = new HashSet<String>(myPref.getStringSet("NN", null));
                    ListView listView = (ListView) findViewById(R.id.listView);
                    notesSet.remove(i);
                    notes.clear();
                    notes.addAll(notesSet);
                    myPref.edit().putStringSet("NN", notesSet).apply();
                    ArrayAdapter arrayAdapter = new ArrayAdapter(YourActtivity.this, android.R.layout.simple_list_item_1, notes);
                    listView.setAdapter(arrayAdapter);
                    Log.i("TEST", "notesSet didn't return null!");
                }
            })
            .show();

同时调试代码检查和返回值。