2017-04-04 28 views
0

語境繪製對象時ID是動態加載和應用簽名

在列表視圖中的每一項將圖像加載不顯示。給定項目的數據,返回資源的id(可繪製)。這個id用在imageview的setResourceId中。

問題

當APK簽署無任何顯示(但沒有出現錯誤)。

測試

確保該資源的正確的ID被加載。一個項目被創建,其匹配的資源是R.drawable.banana,所述ID由該函數返回已登錄以及值R.drawable.banana(如下所示)。

int id = CropDataHelper.getCropsDrawable(myContext, txt); 
Log.i("image id:"+id,"found id Fragment View Cycles"); 
Log.i("raw draw:"+R.drawable.banana,"drawable Fragment View Cycles"); 

記錄的值是相同的,因此返回正確的ID。

進一步測試顯示

如果直接使用資源,R.drawable.example顯示圖像,即使該函數返回的值相同。

id = R.drawable.banana; 
... 
iv.setImageResource(id); 

上一頁失敗嘗試

  • 把資源劃分爲不同的文件夾(無DPI等)

folder attempt reference。然而,由於圖片確實顯示我是否使用 直接R參考這是一個毫無根據的嘗試。

  • 使用繪製資源

使用ID實現直接加載繪製並進行設置。

Drawable d = ContextCompat.getDrawable(myContext,id); 
... 
iv.setImageDrawable(d); 

實際的代碼片段

int id = CropDataHelper.getCropsDrawable(myContext, txt); 
Log.i("image id:"+id,"found id Fragment View Cycles"); 
Log.i("raw draw:"+R.drawable.banana,"drawable Fragment View Cycles"); 
//    id = R.drawable.banana; - testing use of direct resource 
//    Drawable d = ContextCompat.getDrawable(myContext,id); drawable attempt 
ImageView iv = ((ImageView) row.findViewById(R.id.icon_purchaseType)); 
if (id != -1) { 
    iv.setImageResource(id); 
//     iv.setImageDrawable(d); - drawable attempt 
} 

結語

在調試時,只對簽署過的APK不會發生的問題,這讓我相信有一些潛在的權限,R.drawable.example在已簽名的apk上解鎖,但試圖直接使用這些ID時s沒有解鎖。任何幫助表示讚賞,謝謝。

回答

0

解決

字符串名稱的HashMap來[R的IDS

推理

似乎試圖讀取文件時,可能出現過一些權限不可用(只發生在簽名 - 即使這些是應用程序圖像)。要解決這個問題,而不是使用json文件按名稱加載圖像文件,使用字符串創建hashmap以匹配R的ID。

示例代碼

//create hashmap 
private HashMap<String,Integer> resources; 

//fill hash map with resources 
resources.put("FIRST",R.drawable.example_img_1); 
resources.put("SECOND",R.drawable.example_img_2); 

//simple method to access resources 
public Integer getResourceId(String key){ 
    if(resources.containsKey(key)) 
     return resources.get(key); 
    return R.drawable.default_image; 
}