Обновление вида сетки Динамически при удалении элемента (файла)

Я пытаюсь удалить элементы / файлы в виде сетки. Файлы находятся в папке / data / my-image /. Файлы удаляются сразу, но пользовательский интерфейс не обновляется мгновенно. Вот мой код для этого:

imageFilePath = /data/<my-image-folder>/"file.jpg"; File file = new File(imageFilePath); if (file.exists()) { boolean deleted = file.delete(); sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse(imageFilePath+ Environment.getExternalStorageDirectory()))); 

Код просмотра:

 View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View gridView; if (convertView == null) { gridView = new View(context); // get layout from gridlayout.xml gridView = inflater.inflate(R.layout.gridlayout, null); // set value into textview TextView textView = (TextView) gridView .findViewById(R.id.grid_item_label); textView.setText(fileList[position]); System.out.println("value of fileList[position]" + fileList[0]); // set image ImageView imageThumbnail = (ImageView) gridView .findViewById(R.id.grid_item_image); byte[] imageData = null; try { final int THUMBNAIL_SIZE = 64; FileInputStream fis = new FileInputStream(FILE_PATH + fileList[position]); Bitmap imageBitmap = BitmapFactory.decodeStream(fis); Float width = new Float(imageBitmap.getWidth()); Float height = new Float(imageBitmap.getHeight()); Float ratio = width / height; imageBitmap = Bitmap.createScaledBitmap(imageBitmap, (int) (THUMBNAIL_SIZE * ratio), THUMBNAIL_SIZE, false); ByteArrayOutputStream baos = new ByteArrayOutputStream(); imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); imageData = baos.toByteArray(); imageThumbnail.setImageBitmap(imageBitmap); } catch (Exception ex) { } } else { gridView = (View) convertView; } return gridView; } here is my Code for grid View adapter : here is the code ImageAdapter adapter = null; //ImageAdapter extends BaseAdapter if (fileList != null) { adapter = new ImageAdapter(this, fileList); gridView.setAdapter(i); } 

А после удаления, если я это сделаю:

 adapter.notifyDataChanged(); grid.invalidateViews(); 

Компилятор жалуется, что делает adpater «окончательным», но если я сделаю его «окончательным», он жалуется, что я не могу сделать окончательный вариант адаптера, поскольку он не позволит выполнить следующую строку:

 adapter = new ImageAdapter(this, fileList); 

Более того, я не смог найти реализацию notifyDataChanged. Существует notifyDataSetChanged , * notify *, notifyAll и notifyDataSetInvalidated, но noifyDataChanged .

Я думаю, Intent.ACTION_MEDIA_MOUNTED предназначен для всех изображений / файлов, расположенных на внешней SD-карте, а не для файловой системы телефона. Это правильно.

Как я могу это достичь. Плюс совет.

Rgds, Softy

Вы должны посмотреть:

 adapter.notifyDataSetChanged(); grid.invalidateViews(); 

Он будет уведомлять адаптер о том, что что-то изменилось, и перерисовать сетку.

Что касается ACTION_MEDIA_MOUNTED, то в документации говорится: Внешний носитель присутствует и монтируется в точке его подключения. Путь к точке монтирования для удаленных носителей содержится в поле Intent.mData. Intent содержит дополнительную информацию с именем «только для чтения» и логическим значением, указывающим, был ли носитель установлен только для чтения.

http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_MOUNTED

Так что, я думаю, вы правы на этом

Хорошо, я нашел решение: я обновляю файлList снова, после удаления, подобного этому

 File imageFiles = new File(PATH_TO_IMAGES); if (imageFiles.isDirectory()) { fileList = imageFiles.list(); } 

Затем снова обновите gridview с помощью экземпляра Adapter и списка файлов, подобных этому ->

 gridView.setAdapter(new ImageAdapter( ImageGallary.this, fileList)); 

Вам не нужно воссоздавать адаптер. Просто сделайте это,

 File imageFiles = new File(PATH_TO_IMAGES); if(imageFiles.isDirectory()){ fileList.clear() fileList.addAll(imageFiles.list()); adapter.notifyDataSetChanged(); } 

Подробнее см. Android: notifyDataSetChanged (); не работает

Intereting Posts
TextView FontSize в соответствии с различными разрешениями и ScreenSize Bitmap.compress png 8-бит палитры Ошибки при создании Android-проектов в Eclipse ERROR get 'name' attribute: атрибут не является строковым значением Использование оператора Switch для обращения к кнопкам Исключение безопасности только на Android 6 Проложить маршруты с помощью API Карт Google v2 Есть ли у RecyclerView какие-либо преимущества, кроме того, что заставить разработчиков использовать шаблон ViewHolder? Android. Заменить символ * из строки Запрос Realm со списком Android – добавление элемента в пользовательское listview при нажатии кнопки Android периодически отправляет данные из службы в Activity Службы Google-игр входят в систему (неудача первой попытки, успешная вторая) Android – Как проверить, включен ли параметр разработчика Защелка (используется для ожидающего ответа на асинхронный режим) замораживает WebView (и пользовательский интерфейс)