2011-07-27 81 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

我能夠通過使用哈希表來存儲圖像的位置和路徑時,縮略圖加載到解決此。下面是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的字符串版本,沒有任何文件擴展名。

如果我錯了,請糾正我。

也請發佈更多詳細信息,例如您收到的錯誤。

下面更新了答案。

使用View.setTag(Object),當您將項目添加到您的ListView(我猜測)。你可以調用類似下面的內容。

view.setTag("imgFile.jpg"); 

,然後從onClickListener內,只是這樣做:

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

謝謝你的快速回復。我還沒有完全掌握URI。我在傳入的路徑是實際圖像存儲目錄(每個人都有自己的圖像目錄)。我認爲文件名將由遊標返回。 – Sirentec

+0

我收到的錯誤是:IllegalStateException:未知的URL:內容:// media/external/images/media/CaseManager/3 – Sirentec

+0

情況3的圖像名稱是什麼? – styler1972