6

我正在尝试删除网格视图中的项目/文件。这些文件位于/data/my-image-folder/. 文件会立即删除,但 UI 不会立即更新。这是我的代码:

   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;
        }

这是我的网格视图适配器代码:

     ImageAdapter adapter = null; //ImageAdapter extends BaseAdapter
            if (fileList != null) {
                 adapter = new ImageAdapter(this, fileList);
                gridView.setAdapter(i);
            }

如果我这样做,则在删除后:

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

编译器抱怨将适配器设为“最终”,但如果我将其设为“最终”,它会抱怨我无法使适配器成为最终的,因为它不允许以下行发生:

adapter = new ImageAdapter(this, fileList);

此外,我找不到实现notifyDataChanged。有notifyDataSetChangednotifynotifyAllnotifyDataSetInvalidated但没有notifyDataChanged

我认为 Intent.ACTION_MEDIA_MOUNTED 适用于位于外部 sd 卡上的所有图像/文件,而不适用于手机文件系统。这是正确的。

我怎样才能实现它。请建议。

Rgds,软软的

4

3 回答 3

10

你应该看看:

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

它会通知适配器发生了一些变化,并重新绘制网格。

关于,ACTION_MEDIA_MOUNTED文档说: 外部媒体存在并安装在其安装点。已移除媒体的安装点路径包含在 Intent.mData 字段中。Intent 包含一个名为“只读”的额外内容和布尔值,以指示媒体是否以只读方式安装。

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

所以我想你是对的

于 2012-04-07T19:36:29.060 回答
1

好的,我找到了解决方案:我在像这样删除之后再次更新 fileList

File imageFiles = new File(PATH_TO_IMAGES); 

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

然后使用适配器实例和像这样的文件列表再次更新gridview - >

gridView.setAdapter(new ImageAdapter( ImageGallary.this, fileList)); 
于 2012-04-10T13:09:59.623 回答
1

您不需要重新创建适配器。就这样做,

File imageFiles = new File(PATH_TO_IMAGES); 

if(imageFiles.isDirectory()){
   fileList.clear()
   fileList.addAll(imageFiles.list());
   adapter.notifyDataSetChanged();
}

有关更多信息,请参阅Android:notifyDataSetChanged(); 不工作

于 2013-12-11T06:28:11.917 回答