5

我制作了一个程序,它使用存储在设备上的视频填充列表视图并播放它们。它还尝试使用 file.delete 函数实现删除文件的功能。但是,使用 notifydatasetchange() 函数后,文件仍显示在列表视图中。此外,我刚刚注意到视频文件已从 DCIM 文件夹中删除;但是,它显示在设备的图库中,但是当您单击它时,它无法播放。这是我向用户显示对话框的代码部分,当用户单击 Yes 时,然后执行删除功能。

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 

我不明白为什么会这样。有什么有用的建议请...

4

3 回答 3

1

我想我看到了问题。

您正在删除该文件,但实际上您需要从 ArrayListAdapter 中删除相应的 Array 元素,然后在您的适配器上调用 notifyDataSetChanged。

看:

使用适配器动态更新列表视图

要强制媒体扫描仪再次运行,请参阅:

Android文件删除在图库中留下空占位符

您还需要考虑以下几点:

notifyDataSetChanged 示例

于 2011-07-08T09:09:34.263 回答
0

您正在将特定文件夹中的文件名添加到 ArrayList 或某种列表中,以使其显示在 ListView 上。因此,如果它是一个 ArrayList,那么在删除该文件时,即 file.delete() 有两种情况:

  1. 您还应该从 ArrayList 中删除特定名称,然后调用 notifyDataSetChanged() 方法。使用 arraylistname.remove(int index);

  2. 在第二种情况下,如果您删除了文件并且文件已从特定文件夹中成功删除,那么您必须使用零数据初始化 ArrayList 并再次调用将所有文件名重新生成到 ArrayList 中的方法,然后调用 notifydatasetChanged 方法。如果文件已被删除并且您调用该方法从特定文件夹中读取文件名,则使用此方法,删除的文件将不在您的列表中,当您将所有文件名添加到列表中并调用 notifydatasetchanged 时,它将更新您的列表。

希望这有帮助。

如果您不明白我的意思,请发表评论。或需要更多帮助。

于 2011-07-08T09:14:16.650 回答
0

我想您需要强制重新扫描图像/视频媒体存储,因为当您删除文件库时不会将它们显示为已删除。我对吗?

请仔细阅读此讨论

于 2011-07-08T09:37:48.477 回答