删除时未删除的文件仍显示在Listview中

时间:2011-07-08 08:46:44

标签: android listview video delete-file mediastore

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

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

3 个答案:

答案 0 :(得分:1)

我想我看到了问题。

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

请参阅:

update listview dynamically with adapter

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

Android file delete leaves empty placeholder in Gallery

您还需要考虑以下因素:

notifyDataSetChanged example

答案 1 :(得分:0)

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

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

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

  3. 希望这有帮助。

    如果你没有明白我的观点,请记下来。或者需要更多的帮助。

答案 2 :(得分:0)

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

请仔细阅读this discussion