2017-04-04 5 views
0

ContexteDrawable pas affiché lorsque id est chargé dynamiquement et l'application signée

Chaque élément dans une listview charge une image. Compte tenu des données de l'élément, l'identifiant de la ressource (drawable) est renvoyé. Cet identifiant est utilisé dans setResourceId de l'imageview.

Problème

Lorsque l'apk est signé, rien ne s'affiche (mais pas d'erreur).

Test

Assurer l'identification correcte de la ressource est chargée. Un élément a été créé dont la ressource correspondante est R.drawable.banana, l'ID renvoyé par la fonction a été enregistré ainsi que la valeur R.drawable.banana (illustré ci-dessous). Les valeurs consignées étaient les mêmes, d'où l'ID correct était renvoyé.

essais supplémentaires Révèle

Si vous utilisez la ressource directement, R.drawable.example l'image est affichée, même si la fonction retourne la même valeur.

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

tentatives précédentes ont échoué

  • Putting ressources dans un des dossiers différents (pas ppp, etc.)

folder attempt reference. Cependant, puisque l'image montre si j'utilise le direct R référence c'était une tentative sans fondement.

  • Utilisation de la ressource drawable

Utilisez le id atteint pour charger le drawable directement et mettez-le.

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

code réel Snippet

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 
} 

Remarques finales

Le problème ne se produit pas pendant le débogage, uniquement sur un fichier APK, cela me conduit à croire qu'il ya une sous-jacente autorisations que R.drawable.example déverrouille sur un apk signé, mais lorsque vous essayez d'utiliser l'ID directement ces autorisations s ne sont pas déverrouillés. Toute aide est appréciée, merci.

Répondre

0

travail autour

hashmap des noms de chaîne à ids de R

Raisonnement

Il semble qu'il y ait peut-être eu l'autorisation pas disponible lorsque vous essayez de lire les fichiers (Se produit seulement dans signé - même si ce sont des images d'application). Pour contourner ce problème, au lieu d'utiliser un fichier json pour charger les fichiers d'images par nom, un hashmap a été créé avec des chaînes pour correspondre aux ID R.

Exemple de code

//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; 
}