2011-07-27 14 views
1

私はカスタムディレクトリにサムネイル画像を表示しているギャラリーを持っています。ギャラリーは正常に表示されますが、サムネイルをクリックして完全な画像を開くことはできません。私の[非機能]リスナーがここAndroid:特定のディレクトリから画像を読み込む

try { 
     if (LoadImageFiles() == true) { 
      GridView imgGallery = (GridView) findViewById(R.id.gallery); 

      final ImageAdapter ia = new ImageAdapter(PersonMedia.this); 
      imgGallery.setAdapter(ia); 

          // Set up a click listener 
      imgGallery.setOnItemClickListener(new OnItemClickListener() { 

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

         String imgPath = paths.get(position); 

         Intent intent = new Intent(getApplicationContext(), ViewImage.class); 
         intent.putExtra("filename", imgPath); 
         startActivity(intent); 
        } 
      }); 
     } 
    } catch (Exception ex) { 
     Log.e("PersonMedia.LoadPictures", ex.getMessage()); 
    } 

を下回っている]をクリックし、ギャラリーが

//Declare a module level hashtable 
private Hashtable<Integer, String> paths; 



private boolean LoadImageFiles() { 

try{ 
    mySDCardImages = new Vector<ImageView>(); 

    paths = new Hashtable<Integer, String>(); 

    fileCount = 0; 

    sdDir = new File(imageDirectory); 
    sdDir.mkdir(); 

    if (sdDir.listFiles() != null) 
    { 
     File[] sdDirFiles = sdDir.listFiles(); 

     if (sdDirFiles.length > 0) 
     {    
      for (File singleFile : sdDirFiles) 
      {     
       Bitmap bmap = decodeFile(singleFile); 
       BitmapDrawable pic = new BitmapDrawable(bmap); 

       ImageView myImageView = new ImageView(PersonMedia.this);      
       myImageView.setImageDrawable(pic); 
       myImageView.setId(mediaCount);  

       paths.put(fileCount, singleFile.getAbsolutePath()); 

       mySDCardImages.add(myImageView); 

       mediaCount++; 
       fileCount ++; 
      } 
     } 
     } 
    } 
     catch(Exception ex){ Log.e("LoadImageFiles", ex.getMessage()); } 

    return (fileCount > 0); 
} 

答えて

1

:ちょうどこれを行う

view.setTag("imgFile.jpg"); 

そしてあなたonClickListenerの内側から、 。以下は、2つの適切なコードスニペット

//Where the gallery is populated and the onclick is defined 

private void PopulateGallery() { 

    try { 
     if (LoadImageFiles() == true) { 
      GridView imgGallery = (GridView) findViewById(R.id.gallery); 

      imgGallery.setAdapter(new ImageAdapter(PersonMedia.this)); 

      // Set up a click listener 
      imgGallery.setOnItemClickListener(new OnItemClickListener() { 

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

         String imgPath = paths.get(position); 

         Intent intent = new Intent(getApplicationContext(), ViewImage.class); 
         intent.putExtra("filename", imgPath); 
         startActivity(intent); 
        } 
      }); 
     } 
    } catch (Exception ex) { 
     Log.e("PersonMedia.LoadPictures", ex.getMessage()); 
    } 

} 


//Where the images are loaded. You'll need to create a module level hashtable 

private Hashtable<Integer, String> paths; 

private boolean LoadImageFiles() { 

try{ 
    mySDCardImages = new Vector<ImageView>(); 

    paths = new Hashtable<Integer, String>(); 

    fileCount = 0; 

    sdDir = new File(imageDirectory); 
    sdDir.mkdir(); 

    if (sdDir.listFiles() != null) 
    { 
     File[] sdDirFiles = sdDir.listFiles(); 

     if (sdDirFiles.length > 0) 
     {    
      for (File singleFile : sdDirFiles) 
      {     
       Bitmap bmap = decodeFile(singleFile); 
       BitmapDrawable pic = new BitmapDrawable(bmap); 

       ImageView myImageView = new ImageView(PersonMedia.this);      
       myImageView.setImageDrawable(pic); 
       myImageView.setId(mediaCount);  

       paths.put(fileCount, singleFile.getAbsolutePath()); 

       mySDCardImages.add(myImageView); 

       mediaCount++; 
       fileCount ++; 
      } 
     } 
     } 
    } 
     catch(Exception ex){ Log.e("LoadImageFiles", ex.getMessage()); } 

    return (fileCount > 0); 
} 
0

を移入される方法ですあなたのイメージは、.JPGまたは.PNGなどの拡張機能を持っていますか?私は確信していませんが、ファイル拡張子なしでpersonIdの文字列バージョンのイメージを探しているようです。

私が間違っている場合は私を修正してください。

また、取得しているエラーなど、詳細を投稿してください。

以下の回答が更新されました。

ListViewにアイテムを追加しているときは、View.setTag(Object)を使用してください(私は推測しています)。あなたは次のようなものを呼び出すことができます。私はサムネイルがロードされたときに画像の位置とパスを格納するハッシュテーブルを使用することによってこの問題を解決することができた

String img = (String) getTag(); 
+0

は、高速応答をいただき、ありがとうございます。私の脳はまだURIの周りを包んでいるわけではありません。私がwithAppendPathに渡しているのは、実際のイメージが格納されているディレクトリです(それぞれの人は独自のイメージディレクトリを持っています)。私はファイル名がカーソルによって返されると思った。 – Sirentec

+0

私が受け取るエラーは:IllegalStateException:不明なURL:コンテンツ://メディア/外部/画像/メディア/ CaseManager/3 – Sirentec

+0

ケース3の画像の名前は何ですか? – styler1972

関連する問題