Как я могу обрезать свой код?

В моем коде у меня много кодовых блоков этих … например:

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); 

Например, в PHP я могу написать:

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

Но в Java это не работает 🙁

Вы могли бы сделать что-то вроде

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

Для получения ресурса на основе имени.

[РЕДАКТИРОВАТЬ]

И тогда ваш код будет выглядеть следующим образом:

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

И ваша переменная Avatar должна начинаться с нижнего регистра

Для начала используйте функцию для части, которую вы, очевидно, скопировали и вставили.

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

Это, по крайней мере, сокращает его по горизонтали и удаляет много дублирования.

Следующим шагом было бы переместить отображение между целыми числами и ресурсами в одно место, особенно если вам нужно запрашивать это более одного раза:

 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)); 

Вы должны попытаться сделать это в разных строках

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

Вы можете использовать getIdentifier для рисования

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

Получить идентификатор ресурса динамически:

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

Попробуйте это, используйте структуру перечисления следующим образом

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