How can I trim my code?

In my code, I have many code blocks of these ... for example:

if(Avatar==1) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar1);
if(Avatar==2) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar2);
if(Avatar==3) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar3);
if(Avatar==4) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar4);
if(Avatar==5) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar5);
if(Avatar==6) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar6);
if(Avatar==7) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar7);
if(Avatar==8) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar8);
if(Avatar==9) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar9);
if(Avatar==10) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar10);
if(Avatar==11) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar11);
if(Avatar==12) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar12);
if(Avatar==13) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar13);
if(Avatar==14) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar14);
if(Avatar==15) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar15);
if(Avatar==16) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar16);
if(Avatar==17) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar17);
if(Avatar==18) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar18);
if(Avatar==19) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar19);
if(Avatar==20) ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.avatar20);

For example, in PHP, I can write:

**$STRINGavatar** = "avatar20";
echo"((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(R.drawable.**$STRINGavatar**)";

But in Java this does not work: - (

+4
source share
6 answers

You could do something like

getContext().getResources().getIdentifier("avatar" + i, "drawable", getContext().getPackageName())

to get a resource based on a name.

[EDIT]

And then your code will look like this:

int resId = getContext().getResources().getIdentifier("avatar" + Avatar, "drawable", getContext().getPackageName());
((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(resId);

And your Avatar variable should start lowercase

+3
source

Good for starters, use the function for the part that you explicitly copied and pasted.

if (Avatar==1) setImage(R.drawable.avatar1);
if (Avatar==2) setImage(R.drawable.avatar2);
if (Avatar==3) setImage(R.drawable.avatar3);
//...    

private void setImage(final int resource)
{
    ((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(resource);
}

This, at least, cuts it horizontally and removes a lot of duplication.

, :

private int getResource(final int avatar)
{
    switch(avatar)
    {
        case 1: return R.drawable.avatar1;
        case 2: return R.drawable.avatar2;
        case 3: return R.drawable.avatar3;
        //...
        default:
            throw new RuntimeException("No avatar for this");
    }
}

:

setImage(getResource(avatar));
+1

You should try to do this on different lines.

ImageView iv = (ImageView) dialogPopup.findViewById(R.id.imgView);
iv.setImageResource(R.drawable.avatar20)
0
source

You can use getIdentifier for drawing

int id = getResources().getIdentifier(imageName, "drawable", getPackageName());

0
source

Get resource identifier dynamically: -

int id = getResources().getIdentifier("avatar" + Avatar, "drawable", getPackageName());
((ImageView)(dialogPopup.findViewById(R.id.imgView))).setImageResource(id);
0
source

Try this, use an enumeration structure as follows

public enum Avatar {
   R.drawable.avatar1, R.drawable.avatar2, ..R.drawable.avatar20;
   public static final Avatar values[] = values();
}
 public static void main(String []args){
   Drawable avatar = Avatar.values[1];//just put in the number to get the drawable
 }
}
0
source

Source: https://habr.com/ru/post/1681278/


All Articles