我制作了一个程序,用存储在设备上的视频填充列表视图并播放它们。它还尝试使用file.delete函数实现删除文件的功能。但是,在使用notifydatasetchange()函数后,该文件仍显示在列表视图中。此外,我刚刚注意到视频文件已从DCIM文件夹中删除;然而,它出现在设备的图库中,但当你点击它时,它无法播放..这是代码的一部分,我向用户显示一个对话框,当用户点击是,然后执行删除功能。
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
file.delete();
adapter.notifyDataSetChanged();
//list.setAdapter(adapter);
break;
case DialogInterface.BUTTON_NEGATIVE:
image2.setImageResource(R.drawable.play);
flag.setText("play");
//No button clicked
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("This Item will be Deleted\nAre you sure?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
}// else closes
我不明白为什么会这样。 任何有用的建议请...
答案 0 :(得分:1)
我想我看到了问题。
您正在删除该文件,但实际上您需要从ArrayListAdapter中删除相应的Array元素,然后在适配器上调用notifyDataSetChanged。
请参阅:
update listview dynamically with adapter
要强制媒体扫描程序再次运行,请参阅:
Android file delete leaves empty placeholder in Gallery
您还需要考虑以下因素:
答案 1 :(得分:0)
您正在将特定文件夹中的文件名添加到ArrayList或某种列表中,以便将其显示在ListView上。因此,如果它是一个ArrayList,那么在删除该文件时,即file.delete()有两种情况:
您还应该从ArrayList中删除特定名称,然后调用notifyDataSetChanged()方法。使用arraylistname.remove(int index);
在第二种情况下,如果删除文件并且文件已从特定文件夹中成功删除,则必须使用零数据初始化ArrayList,然后再次调用将所有文件名重新生成到ArrayList中的方法。然后调用notifydatasetChanged方法。通过使用此文件,如果文件已被删除,并且您调用方法从特定文件夹中读取文件名,则删除的文件将不在您的列表中,当您将所有文件名添加到列表中并调用notifydatasetchanged时,它将更新您的列表
希望这有帮助。
如果你没有明白我的观点,请记下来。或者需要更多的帮助。
答案 2 :(得分:0)
我想您需要强制重新扫描图像/视频媒体库,因为当您删除文件库时不会将'em'显示为已删除。我是对的吗?
请仔细阅读this discussion