我正在尝试删除网格视图中的项目/文件。这些文件位于/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())));
getview代码:
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();
编译器抱怨将adpater设为“最终”,但如果我将其设为“最终”,则会抱怨我无法使适配器最终,因为它不允许以下行发生:
adapter = new ImageAdapter(this, fileList);
此外,我找不到实施 notifyDataChanged 。 notifyDataSetChanged ,通知, notifyAll 和< strong> notifyDataSetInvalidated 但没有 notifyDataChanged 。
我认为Intent.ACTION_MEDIA_MOUNTED适用于位于外部SD卡上的所有图像/文件,而不适用于手机文件系统。这是正确的。
我怎样才能实现它。 Plz建议。
RGDS, 软质皮
答案 0 :(得分:10)
你应该看看:
adapter.notifyDataSetChanged();
grid.invalidateViews();
它会通知适配器有什么变化,并重新绘制网格..
关于, ACTION_MEDIA_MOUNTED 文档说: 外部介质存在并安装在其安装点。已删除介质的装入点的路径包含在Intent.mData字段中。 Intent包含一个名为“read-only”的额外值和一个布尔值,用于指示媒体是否只读。
http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_MOUNTED
所以我猜你是对的
答案 1 :(得分:1)
好的,我找到了解决方案:我在删除之后再次更新了fileList
File imageFiles = new File(PATH_TO_IMAGES);
if (imageFiles.isDirectory())
{
fileList = imageFiles.list();
}
然后使用Adapter实例和像这样的文件列表再次更新gridview - &gt;
gridView.setAdapter(new ImageAdapter( ImageGallary.this, fileList));
答案 2 :(得分:1)
您不需要重新创建适配器。就这么做,
File imageFiles = new File(PATH_TO_IMAGES);
if(imageFiles.isDirectory()){
fileList.clear()
fileList.addAll(imageFiles.list());
adapter.notifyDataSetChanged();
}