momoja
momoja

Reputation: 938

How to dynamically add drawables to a TextView

I have a listview that displays a list of textviews. I format the said textviews with a function tha goes something like

private void myFunc(TextView tv){
   if(tv.getText.toString().contains("A")){
       tv.setDrawableLeft(R.id.apple);        
   }else if(tv.getText.toString().contains("A")){
       tv.setDrawableLeft(R.id.apple);        
   }else if(tv.getText.toString().contains("B")){
       tv.setDrawableLeft(R.id.ball);        
   }...
   else if(tv.getText.toString().contains("Z")){
       tv.setDrawableLeft(R.id.zebra);        
   }

now this is all pseudo, but it works. I have implemented it. However, my problem now is being able to write it in such a way that I would NOT have to go through a million if-else calls just to be able to format my textviews.

Can anyone suggest a way in order for me to make this logic with a much shorter/more elegant way? Any help, comment, suggestion would be greatly appreciated.

Thank you!

Upvotes: 0

Views: 269

Answers (2)

Atul O Holic
Atul O Holic

Reputation: 6792

Give your drawables the Names of the text you are matching like A.png for apple.

Then, use the below to get its id from name

public int getID(String drawableName){
   Resources resources = context.getResources();
   final int resourceId = resources.getIdentifier(drawableName, "drawable", 
   context.getPackageName());
   return resources.getDrawable(resourceId);
}

and simply do,

tv.setDrawableLeft(getID(tv.getText.toString()));

Hope this helps. (I like @0xDEADC0DE answers as well. :))

Upvotes: 1

Michael Ambaye
Michael Ambaye

Reputation: 134

how about you use a map:

Here's a thread that you might find useful

it's a javascript thread but i'm sure you'll make some use of it-

Upvotes: 0

Related Questions