我的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;
}
});
这是我的节目代码的一小段代码。程序的其余部分工作,只有在我介绍这个新代码时才会发生应用程序崩溃。谢谢你的时间。
答案 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();
同时调试代码检查和返回值。