2012-04-07 9 views
5

Öğeleri/dosyaları ızgara görünümünde silmeye çalışıyorum. Dosyalar /data/my-image-folder/'da bulunur. Dosyalar bir kerede silinir ancak UI anında güncellenmez. İşte bunun için benim kodudur:Kılavuz Görünümü Güncelleme Bir öğe (dosya) silindiğinde dinamik olarak

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 kodu:

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

sildikten sonra bunu yaparsam süre:

ızgara Görünüm adaptörü için benim Kod

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

olduğunu

c ompiler "nihai" olarak adpater yapmak şikayet ama ben "nihai", bu ı aşağıda hat olmasına izin vermez olarak adaptör nihai hale olamaz şikayet yaparsanız:

adapter = new ImageAdapter(this, fileList); 

Üstelik ben 'edemezdim t uygulama .Orada'da notifyDataSetChanged olan notifyDataChanged bulmak, , notifyAll ve notifyDataSetInvalidated ama hiçbir notifyDataChanged bildirir.

Sanırım Intent.ACTION_MEDIA_MOUNTED, harici sd kartta bulunan tüm görüntü/dosyalar içindir ve bu doğru olan telefon filesystem.is için değil.

Bunu nasıl sağlayabilirim? Plz tavsiyesi.

Rgds, Softy

cevap

10

de misin görünmelidir: dokümantasyon Bir şey değişti adaptör haberdar ve ızgara çizer

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

..

ilgili olarak ACTION_MEDIA_MOUNTED diyor ki: Harici ortam mevcut ve montaj noktasında monte edilmiş. Kaldırılan medya için bağlama noktasının yolu Intent.mData alanında bulunur. Niyet, “salt okunur” adıyla bir medya ve salt okunur ortamın okunup okunmadığını belirtmek için Boole değerini içerir. i sonra güncellenmesi bu

File imageFiles = new File(PATH_TO_IMAGES); 

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

gibi silindikten sonra, tekrar FILELIST güncelleştiriyorum:

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

Bu yüzden ben çözüm buldum bu

+0

adapter.notifyDataChanged bkz fazlası için

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

Bunu yapmak ;? Bunu SO postların çoğunda gördüm. Adaptör 'u tanımlayın. Bu koda sahibim: gridView.setAdapter (yeni ImageAdapter (this, fileList)); üst rgds bir yerde - softy – Raulp

+0

Ben tam olarak ne istediğini anlamıyorum. Bağdaştırıcı aslında dosyalarınız ile grid görünümünüz arasındaki bağlantıdır, bu nedenle her izlediğinizde, izleyiciyi ızgara görünümünde görüntülenen öğeler hakkında bilgilendirmeniz gerekir. Bağdaştırıcınızla ilgili kodu postada da yapıştırmalısınız. –

+0

Jeremy, soru ve gridview kodunu güncelledi. – Raulp

1

Tamam üzerinde haklısın Bağdaştırıcı örneği ve bu gibi filelist ile yeniden ızgara görünümü ->

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