¿Cómo puedo recortar mi código?

En mi código, tengo muchos codeblocks de estos … por ejemplo:

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

Por ejemplo en PHP puedo escribir:

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

Pero en Java no funciona 🙁

Tu puedes hacer algo como

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

Para obtener el recurso basado en el nombre.

[EDITAR]

Y entonces su código sería:

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

Y su Avatar variable debe comenzar con una minúscula

Bueno para empezar, utilice una función para la parte que obviamente ha copiado y pegado.

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

Que al menos encoge horizontalmente y elimina una gran cantidad de la duplicación.

Lo siguiente sería mover el mapeo entre enteros y recursos a un solo lugar, especialmente si necesita consultar más de una vez:

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

Y entonces usted puede cambiar el código anterior a:

 setImage(getResource(avatar)); 

Usted debe tratar de hacerlo en diferentes líneas

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

Puede utilizar getIdentifier para el dibujable

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

Obtenga el identificador de recursos de forma dinámica:

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

Pruebe esto, utilice una estructura de enumeración como sigue

 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 } } 
  • Transmisión de audio y vídeo desde Android a PC / web.
  • android redimensionar el diseño cuando el teclado aparece
  • Reaccionar Nativo Android Pantalla de bienvenida
  • Android Tests: Stubbing Out Retrofit con Mockito
  • Archivo .gitignore típico de una aplicación para Android
  • GetAvailableBlocksLong () * getBlockSizeLong () VS getAvailableBytes ()
  • Transmitir audio desde un dispositivo Android a un servidor
  • Objeto de interfaz de usuario creado a través de XML no se está barajando en Android Marshmallow
  • Consumir servicio REST Web y analizar datos XML en Android
  • ¿Hay una manera de obtener una lista de todas las clases de un archivo .dex?
  • LocationClient getLastLocation () devolver null
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.