2012-04-07 17 views
5

アイテム/ファイルをグリッドビューで削除しようとしています。ファイルは/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(); 

c ompilerは「最終」として特殊なアダプタを作るために文句を言うが、私はそれが「最後の」作る場合、それは以下の行が発生することはできませんとして私は、アダプタの決勝を行いカントと文句を言い:

adapter = new ImageAdapter(this, fileList); 

また、私は「couldnトン見つけ実装をnotifyDataChanged .Thereがを通知し、をnotifyDataSetChangedされ、とのnotifyAll をnotifyDataSetInvalidatedが、何のをnotifyDataChangedません。

私はIntent.ACTION_MEDIA_MOUNTEDは、外部のSDカードにあるすべての画像/ファイルで、正しいファイルシステムではないと思います。

どうすれば実現できますか? Plzアドバイス。

RGDS、 ソフティ

答えて

10

あなたが見なければならない:

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

それは何かが変わっアダプタを通知し、グリッドを再描画します。..に関する

ACTION_MEDIA_MOUNTEDドキュメント: 外部メディアが存在し、マウントポイントにマウントされています。削除されたメディアのマウントポイントへのパスは、Intent.mDataフィールドに格納されています。インテントには、メディアが読み取り専用でマウントされているかどうかを示す "読み取り専用"とブール値の名前が付けられています。

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

だから、私は解決策を見つけたあなたは右のこの

+0

adapter.notifyDataChanged()を参照してください

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

を行います;?私はこれをほとんどのSO posts.CSan を定義するplzを参照してください。私はこのコードがあります:gridView.setAdapter(new ImageAdapter(this、fileList));どこかの上のrgds - 柔らかい – Raulp

+0

私はあなたが欲しいものを正確に理解していません。アダプタは実際にはファイルとグリッドビューの間のリンクなので、グリッドビューに表示されている項目を変更するたびにアダプタに通知する必要があります。アダプタに関するコードをポストに貼り付ける必要があります。 –

+0

Jeremy、質問とgridviewコードを更新しました。 – Raulp

1

[OK]をにしていると思います:私は再び、Filelistを更新しています、この

File imageFiles = new File(PATH_TO_IMAGES); 

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

のような削除は、その後更新した後、再度アダプタインスタンスとファイルリストのグリッドビュー - >

gridView.setAdapter(new ImageAdapter(ImageGallary.this, fileList)); 
関連する問題