Ich versuche, die Elemente/Dateien in einer Rasteransicht zu löschen. Die Dateien befinden sich in der /data/my-image-folder/
. Die Dateien werden sofort gelöscht, aber die Benutzeroberfläche wird nicht sofort aktualisiert. Hier ist mein Code dafür:Aktualisieren der Rasteransicht Dynamisch, wenn ein Element (Datei) gelöscht wird
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 Code:
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;
}
hier ist mein Code für die Netzansicht Adapter:
ImageAdapter adapter = null; //ImageAdapter extends BaseAdapter
if (fileList != null) {
adapter = new ImageAdapter(this, fileList);
gridView.setAdapter(i);
}
während nach dem Löschen, wenn ich tun:
adapter.notifyDataChanged();
grid.invalidateViews();
c ompiler klagt die Adpater als „endgültig“ zu machen, aber wenn ich es „endgültig“, es beschwert sich, dass ich Adapter endgültig machen kann nicht, da es nicht die unter der Linie passieren lassen:
adapter = new ImageAdapter(this, fileList);
Außerdem I couldn‘ t finden die Umsetzung notifyDataChanged .Es ist notifyDataSetChanged, benachrichtigen, notifyAll und notifyDataSetInvalidated aber keine notifyDataChanged.
Ich denke, Intent.ACTION_MEDIA_MOUNTED ist für alle Bilder/Dateien auf der externen SD-Karte und nicht für das Telefon-Dateisystem. Das ist richtig.
Wie kann ich es erreichen? Plz Beratung.
Rgds, Softy
adapter.notifyDataChanged() sehen ;? Ich habe das auf den meisten SO-Posts gesehen. Sie können den Adapter definieren. Ich habe diesen Code: gridView.setAdapter (new ImageAdapter (this, fileList)); irgendwo oben rgds - softy –
Raulp
Ich verstehe nicht genau, was Sie wollen. Der Adapter ist eigentlich die Verbindung zwischen Ihren Dateien und Ihrer Gridview, so dass Sie den Adapter jedes Mal benachrichtigen müssen, wenn Sie Änderungen an den in der Gridview angezeigten Elementen vornehmen. Sie sollten den Code für Ihren Adapter auch in die Post einfügen. –
Jeremy, aktualisierte die Frage und den Gridview-Code. – Raulp