【问题标题】:Files not removed upon delete and still shown in Listview删除时未删除的文件仍显示在 Listview 中
【发布时间】:2011-07-08 08:46:44
【问题描述】:

我制作了一个程序,它使用存储在设备上的视频填充列表视图并播放它们。它还尝试使用 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 

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

【问题讨论】:

  • 我不认为没有代码没有人可以帮助你
  • 我添加了一些代码.. 现在有什么建议
  • @Farhan,您可能需要添加更多代码。文件是某种数组吗?适配器使用它吗?

标签: android listview video delete-file mediastore


【解决方案1】:

我想我看到了问题。

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

见:

update listview dynamically with adapter

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

Android file delete leaves empty placeholder in Gallery

您还需要考虑以下几点:

notifyDataSetChanged example

【讨论】:

  • @Justin.. 非常感谢您的帮助.. 解决了.. 先生还有一个问题。画廊中的文件现在已被删除,媒体扫描仪也可以正常工作。但是我无法使用 notifydatasetChanged() 刷新我的列表。我需要刷新活动。有没有办法再次重新启动活动???如果你能在这里帮助我,我申请的几乎所有问题都会得到解决。希望你也能对此有所了解...
【解决方案2】:

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

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

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

希望对您有所帮助。

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

【讨论】:

  • 即使我们现在忘记了 listview。问题是我删除的视频文件已从 DCIM 文件夹中删除,但它们仍显示在库中。我认为更新 MediaStore 存在一些问题,因为当我从系统中删除任何文件时;媒体扫描完成后,当我运行我的应用程序时,所有已删除的项目都会自动删除..
【解决方案3】:

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

请仔细阅读this discussion

【讨论】:

  • 感谢先生的回答。你能告诉我如何更新或刷新列表视图。我使用了 notifyDataSetChange() 但我需要刷新 Activity 以便我的列表是最新的。你能帮我吗??
猜你喜欢
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多