Файлы, не удаленные при удалении и все еще показанные в Listview - PullRequest
4 голосов
/ 08 июля 2011

Я создал программу, которая заполняет список просмотра видео, сохраненными на устройстве, и воспроизводит их. Он также пытался реализовать функцию удаления файла с помощью функции 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 ]

1 голос
/ 08 июля 2011

Я думаю, что вижу проблему.

Вы удаляете файл, однако вам действительно нужно удалить соответствующий элемент Array из ArrayListAdapter, а затем вызвать notifyDataSetChanged на вашем адаптере.

См .:

динамически обновлять представление списка с помощью адаптера

Чтобы принудительно запустить сканер мультимедиа, см .:

Удаление файла Android оставляет пустой заполнительв галерее

Вам также необходимо учесть следующее:

notifyDataSetChanged пример

0 голосов
/ 08 июля 2011

Полагаю, вам нужно было бы принудительно повторно сканировать медиастроение изображений / видео, поскольку при удалении файловой галереи они не отображаются как удаленные. Я прав?

Пожалуйста, прочитайте внимательно это обсуждение

0 голосов
/ 08 июля 2011

Вы добавляете имена файлов из определенной папки в ArrayList или какой-то список, чтобы он отображался в ListView. Таким образом, если это ArrayList, то при удалении этого файла, т.е. file.delete (), возможны два случая:

  1. Вы также должны удалить определенное имя из ArrayList и затем вызвать метод notifyDataSetChanged (). используя arraylistname.remove (int index);

  2. Во 2-м случае, если вы удаляете свой файл и файл был успешно удален из определенной папки, вам нужно инициализировать ArrayList с нулевыми данными и снова вызвать метод, который будет преобразовывать все ваши имена файлов в ArrayList затем вызовите метод notifydatasetChanged. с помощью этого, если файл был удален, и вы вызываете метод для чтения имен файлов из определенной папки, удаленный файл не будет в вашем списке, и когда вы добавите все имена файлов в список и вызовете notifydatasetchanged, он обновит ваш Список.

Надеюсь, что это помогло.

Просто прокомментируйте, если вы не поняли мою точку зрения. или нужна дополнительная помощь.

...