我使用自定义的SimpleCursorAdapter填充了listview。在listview的onItemClickListener上,它打开另一个活动,它的工作。现在,onitemLongClickListener我想要显示一个警告对话框,其中包含删除文件的是,否选项。选择yes后,我将获得光标和项目的相关数据库条目,并删除该条目并从应用程序数据目录中删除文件,但listview不会刷新,直到我关闭应用程序并重新打开它。在删除longclick listener中的文件和数据库条目后,我尝试使用adapter.changeCursor(光标),但没有成功。在删除文件和数据库条目后,我需要做什么才能使它立即刷新?
MainActivity:
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long l) {
cursor = (Cursor) lv.getAdapter().getItem(position);
filepath = cursor.getString(cursor.getColumnIndex("filename"));
final File file = new File(filepath);
builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Delete File");
builder.setMessage("Are you sure you want to delete this file?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
boolean isDeleted = file.delete();
int count = db.delteSingleEntry(filepath);
if (isDeleted && count != 0){
Toast.makeText(MainActivity.this, "File deleted and Database entry removed", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
adapter.changeCursor(cursor);
return false;
}
});
}发布于 2017-08-24 00:46:48
当底层数据发生变化时,您需要通知数据观察者和任何ui (如列表视图或循环视图)进行自我刷新,这可以通过使用BaseAdapter.notifydatasetchanged()方法来完成。
由于游标适配器是BaseAdapter的子类,因此您也可以对适配器使用此方法。
发布于 2017-08-24 00:41:29
发布于 2017-08-25 18:29:57
我把它修好了。我在delete语句之后调用了我的populatelistview()方法,它立即更新了listview。感谢所有人。
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long l) {
cursor = (Cursor) lv.getAdapter().getItem(position);
filepath = cursor.getString(cursor.getColumnIndex("filename"));
final File file = new File(filepath);
builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Delete File");
builder.setMessage("Are you sure you want to delete this file?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
boolean isDeleted = file.delete();
int count = db.delteSingleEntry(filepath);
if (isDeleted && count != 0){
populateListview(); //I added this line and problem resolved.
Toast.makeText(MainActivity.this, "File deleted and Database entry removed", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
}
});https://stackoverflow.com/questions/45845103
复制相似问题