2017-08-06 1 views
0

Je dois passer la couleur personnellevaleur de couleur de fond HashMap pour Listview

<color name="colorPrimary">#3F51B5</color>

dans HashMap comme ce

temp.put(COLOR_COLUMN, String.valueOf(R.color.colorPrimary));

quand je lis la valeur que je fais:

if(map.get(COLOR_COLUMN) != null){ int color = Integer.valueOf(map.get(COLOR_COLUMN));}

et je setBackgroundColor (couleur) de mon TextView

mais la valeur est quelque chose comme 2131492900 et la couleur est gris très différent de la couleur de départ je mis

Comment puis-je résoudre?

Merci

+2

Veuillez indiquer la déclaration/l'initialisation de la variable "temp" –

+0

Pourquoi analysez-vous la valeur de la couleur hexadécimale en entier? Vous devriez obtenir la valeur de chaîne, puis convertir l'hexagone en couleur. Ou définissez la couleur hexadécimale –

+1

(1) que se passe-t-il si vous définissez directement SetBackgroundColor (R.color.colorPrimary)? (2) Essayez de consigner la couleur d'arrière-plan de TextView à comparer, avec '((ColorDrawable) textView.getBackground()). GetColor()', avant et après le changement, cette valeur a-t-elle un sens? (3) Voulez-vous vraiment garder un int comme une chaîne dans un hashmap? Quel est ce cas d'utilisation? – orip

Répondre

2

Une ressource (comme R.color.colorPrimary) dans Android est en fait représentée par un identifiant de ressource sous la forme d'un entier. Ce n'est pas la valeur de couleur réelle . Pour obtenir la valeur de couleur, vous pouvez utiliser la méthode int getColor(int id) fournie. Voir aussi Accessing Resources dans le Guide du développeur Android.

Une bonne façon de sauver l'identifiant de la ressource et de réutiliser la couleur serait:

HashMap<Integer, Integer> temp = new HashMap<>(); 
temp.put(COLOR_COLUMN, R.color.colorPrimary); 
int resourceId = temp.get(COLOR_COLUMN); 
view.setBackgroundColor(getColor(resourceId)); 

Comme alternative, vous pouvez également enregistrer directement la représentation entière de la couleur (et non pas son identifiant de ressource):

HashMap<Integer, Integer> temp = new HashMap<>(); 
temp.put(COLOR_COLUMN, getColor(R.color.colorPrimary)); 
int color = temp.get(COLOR_COLUMN); 
view.setBackgroundColor(color); 

Si pour une raison quelconque, vous devez enregistrer en tant que chaîne que vous pouvez faire l'identifiant de la ressource si bien sûr:

HashMap<Integer, String> temp = new HashMap<>(); 
temp.put(COLOR_COLUMN, String.valueOf(R.color.colorPrimary)); 
int resourceId = Integer.parseInt(temp.get(COLOR_COLUMN)); 
view.setBackgroundColor(getColor(resourceId)); 

J'ai supposé que votre variable COLOR_COLUMN est un nombre entier.