2016-08-28 47 views
0

我需要將圖像從drawable加載到圖像視圖。 ImageView是一個ListViewItem的一部分,因此我有大量的項目和大量的圖像。Android僅使用文件名將圖像從drawable加載到ImageView中

加載時,應用程序會解析一個JSON文件,其中指出了每個列表項中要加載的文件名以及其他信息。

例如,「test_a.jpg」。

「test_a.jpg」文件位於「drawable」中。

我想,在運行時,加載可繪製/ test_a.jpg,test_b.jpg,big_chief.jpg等等...

int intCurrImageResourceID = this.context.getResources().getIdentifier(strPictureName, "drawable", context.getPackageName()); 

就如何實現這一目標的任何想法?

***編輯**** 事實證明,你不應該使用文件擴展名。所以image.jpg是錯誤的。圖像是正確的。謝謝大家。特別是@Augusto卡爾莫。

+0

用於畢加索在圖像數量較大時用於在圖像視圖中加載圖像。 –

+0

雖然圖像存在於Drawable文件夾中,但從服務器加載圖像名稱並不是最佳做法。 –

+0

@BhunnuBaba,我可以使用它,但對於我的MVP無需這樣做。我可以使用圖像名稱在運行時獲取資源ID嗎? – dotaneli

回答

0

----更新(正確答案)

一個問題,在你的代碼,是strPictureName等於,例如,像這樣:"myDogPicture.png"?如果是,則應首先從字符串中刪除".png"。測試它:)要從資源ID獲取可繪製的圖像,您不應該使用圖像擴展。

----老答案

您可以用下面的代碼實現這一點:

// example - your ImageView 
ImageView myImageView = (ImageView)findViewById(R.id.my_image_view); 
// suppose the name of your image in drawable/ is my_image_name.jpg. 
myImageView.setImageResource(R.drawable.my_image_name); 

如果你已經知道字符串和資源ID之間的映射將是什麼,你怎麼看待使用枚舉?例如:

public enum MyImage{ 
     CAT_IMAGE("cat.png", R.drawable.cat), 
     DOG_IMAGE("dog.png", R.drawable.dog), 
     HORSE_IMAGE("horse.png", R.drawable.horse); 

     private final String fileName; 
     private final int resId; 

     MyImage(String fileName, int resId){ 
      this.fileName = fileName; 
      this.resId = resId; 
     } 

     /** 
     * 
     * @param imageFileName 
     * @return -1 if image not found 
     */ 
     public int getResId(String imageFileName){ 
      int resId = -1; 
      for (MyImage myImage : MyImage.values()) { 
       if (imageFileName.equals(myImage.fileName)){ 
        resId = myImage.resId; 
        break; 
       } 
      } 
      return resId; 
     } 
    } 
+0

謝謝..但我需要發送到「setImageResource」的值是R.drawable + strMyImageNameStringVariableToHoldTheActualName。 setImageResource期望的是一個資源ID,挑戰在於將我的圖像名稱轉換爲ID。 – dotaneli

+0

我已更新我的回答 –

+0

謝謝,但這不是我的目的通用。我真的希望我的嘗試int intCurrImageResourceID = this.context.getResources()。getIdentifier(strPictureName,「drawable」,context.getPackageName()); 就夠了。 – dotaneli

相關問題