Файлы, которые не удаляются при удалении и по-прежнему отображаются в списке

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

Я не понимаю, почему это происходит. Любые полезные предложения, пожалуйста...


person Farhan    schedule 08.07.2011    source источник
comment
Не думаю, что без куска кода вам никто не сможет помочь   -  person Barmaley    schedule 08.07.2011
comment
Я добавил некоторый код .. любые предложения сейчас   -  person Farhan    schedule 08.07.2011
comment
@Farhan, вам может понадобиться добавить больше кода. Является ли файл каким-то массивом? Использует ли его адаптер?   -  person Intrications    schedule 08.07.2011


Ответы (3)


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

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

Видеть:

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

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

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

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

пример notifyDataSetChanged

person Justin Shield    schedule 08.07.2011
comment
@ Джастин .. большое спасибо за помощь .. Все исправлено .. Еще одна проблема, сэр. Файлы из галереи теперь удалены и медиа сканер тоже работает нормально. Но мне не удалось обновить свой список с помощью notifydatasetChanged(). Мне нужно обновить действие. Есть ли способ снова перезапустить действие??? Если вы можете помочь мне здесь, почти все проблемы с моим приложением будут решены. Надеюсь, у вас тоже есть какое-то представление об этом... - person Farhan; 08.07.2011

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

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

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

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

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

person Shah    schedule 08.07.2011
comment
Даже если мы сейчас забудем о listview. Проблема в том, что видеофайлы, которые я удалил, удаляются из папки DCIM, но они все еще отображаются в галерее. Я думаю, что есть проблема с обновлением MediaStore, потому что, когда я удаляю любой файл из моей системы; медиасканирование выполнено, и после этого, когда я запускаю свое приложение, все удаленные элементы автоматически удаляются. - person Farhan; 08.07.2011

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

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

person Barmaley    schedule 08.07.2011
comment
спасибо, сэр, за ваш ответ. Можете ли вы сказать мне, как обновить или обновить список. Я использовал notifyDataSetChange(), но мне нужно обновить активность, чтобы мой список был актуальным. Можешь мне помочь?? - person Farhan; 08.07.2011