2011-12-27 21 views

Respuesta

151

Prueba de esto,

int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null); 

Esto devolverá el id de la estirable que desea acceder ... entonces se puede establecer la imagen en el imageview haciendo lo siguiente

imageview.setImageResource(id); 
+0

Gracias una tonelada ... lo encontré en otro lado todavía gracias por sus esfuerzos ... :) – Arun

+11

Sin embargo, el uso de setImageResource() "hace lectura y decodificación de mapa de bits en el hilo de la interfaz de usuario, lo que puede causar un retraso de latencia .. Considere usar setImageDrawable() o setImageBitmap(). " _ (Documentación de Android) _ – chetto

+4

También puede obtener la identificación simplemente usando: R.drawable.filemane – Artur

74
Drawable image = ImageOperations(context,ed.toString(),"image.jpg"); 
      ImageView imgView = new ImageView(context); 
      imgView = (ImageView)findViewById(R.id.image1); 
      imgView.setImageDrawable(image); 

o

setImageDrawable(getResources().getDrawable(R.drawable.icon)); 
+0

dijo que está generando una cadena de la base de datos dinámicamente con el mismo nombre de imagen. –

+0

sry me equivoqué, entendí la pregunta .. –

+3

getDrawable (R.drawable.icon) está en desuso – Daryn

-4

El archivo 'R' no se pueden generar en el tiempo de ejecución de la aplicación. Puede usar otras alternativas como usar if-else o switch-case

+0

Una vez más. Un usuario más. –

+0

Esto no parece estar relacionado con la pregunta. Parece como si estuviera tratando de establecer una vista de imagen a un recurso ya existente, en lugar de tratar de generar 'R' de nuevo – Greyson

+0

@paresh u obtuvo el punto Buddy, ¿dónde está la solución .. ?? – Arun

20

Los nombres dibujables de recursos no se almacenan como cadenas, por lo que deberá resolver la cadena en la constante entera generada durante la compilación. Puede usar la clase Resources para resolver la cadena en ese entero.

Resources res = getResources(); 
int resourceId = res.getIdentifier(
    generatedString, "drawable", getPackageName()); 
imageView.setImageResource(resourceId); 

Esto resuelve su cadena generada en el número entero que la ImageView puede utilizar para cargar la imagen de la derecha.

Alternativamente, puede usar la identificación para cargar el Drawable manualmente y luego establecer la imagen usando ese dibujante en lugar del ID del recurso.

Drawable drawable = res.getDrawable(resourceId); 
imageView.setImageDrawable(drawable); 
+0

@Greyson ... Qué lindo señor ... qué es lo que estoy buscando ... Muchas gracias ... :) – Arun

+0

¿No existe ese archivo o error de directorio? puede por favor ayuda –

7

Esto funciona, al menos en Android API 15

ImageView = imgv; 
Resources res = getResources(); // need this to fetch the drawable 
Drawable draw = res.getDrawable(R.drawable.image_name_in_drawable); 
imgv.setImageDrawable(draw); 

Puede usar setImageResource(), pero la documentación especifica que "realiza la lectura y decodificación del mapa de bits en el subproceso de la interfaz de usuario, lo que puede causar una interrupción de latencia ... considere usar setImageDrawable() o setImageBitmap()." según lo declarado por Chetto

0

que tenían el mismo problema que tú y yo hice lo siguiente para solucionarlo:

**IMAGEVIEW**.setImageResource(getActivity() 
      .getResources() 
      .getIdentifier("**IMG**", "drawable", getActivity() 
      .getPackageName())); 
11

Tan simple como esta respuesta:

Drawable myDrawable = getResources().getDrawable(R.drawable.pic); 
imageview.setImageDrawable(myDrawable); 
48

Yo personalmente prefiero utilizar el método setImageResource() así.

ImageView myImageView = (ImageView)findViewById(R.id.myImage); 
myImageView.setImageResource(R.drawable.icon); 
+1

este gana, ya que es posible que desee cambiar la imagen desde cualquier lugar de su código donde no tenga contexto para llamar al método getResources(). por ejemplo en adaptadores. No es necesario pasar el contexto a través del constructor solo para esta funcionalidad. –

+1

¡Mejor, gracias! – luiswill

3

Si no se puede conseguir Recursos objeto como éste en una clase que no es una actividad, hay que añadir método para getResources (getContext()), por ejemplo

ImageView image = (ImageView) v.findViewById(R.id.item_image); 
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName()); 
image.setImageResource(id); 
-2

un pedazo de mi proyecto , ¡Todo funciona!)

@Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     final ModelSystemTraining modelSystemTraining = items.get(position); 

int icon = context.getResources().getIdentifier(String.valueOf(modelSystemTraining.getItemIcon()), "drawable", context.getPackageName()); 

     final FragmentViewHolderSystem fragmentViewHolderSystem = (FragmentViewHolderSystem) holder; 
     final View itemView = fragmentViewHolderSystem.itemView; 
//    Set Icon 
fragmentViewHolderSystem.trainingIconImage.setImageResource(icon); 
//    Set Title 
fragmentViewHolderSystem.title.setText(modelSystemTraining.getItemTitle()); 
//    Set Desc 
fragmentViewHolderSystem.description.setText(modelSystemTraining.getItemDescription()); 
+0

Realmente debería agregar alguna explicación sobre por qué debería funcionar este código; también puede agregar comentarios en el código mismo; en su forma actual, no proporciona ninguna explicación que pueda ayudar al resto de la comunidad a comprender lo que le hizo resolver/responder la pregunta. – ishmaelMakitla

1

También puede usar algo como:

imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(), R.drawable.generatedID));

o el uso de Picasso:

Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);

0

construir una clase POJO.java y crear "constructor, captador & métodos setter "

class POJO{ 
     public POJO(Drawable proImagePath) { 
       setProductImagePath(proImagePath); 
     } 

     public Drawable getProductImagePath() { 
       return productImagePath; 
     } 

     public void setProductImagePath(Drawable productImagePath) { 
       this.productImagePath = productImagePath; 
     } 
} 

A continuación, configurar los adaptadores de recursos a través de imágenes dibujable a CustomAdapter.java

class CustomAdapter extends ArrayAdapter<POJO>{ 

     private ArrayList<POJO> cartList = new ArrayList<POJO>(); 
     public MyCartAdapter(Context context, int resource) { 
      super(context, resource); 
     } 

     public MyCartAdapter(Context context, ArrayList<POJO> cartList) { 
      super(context, 0, cartList); 
      this.context = context; 
      this.cartList = cartList; 

     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      /* 
      *Here you can setup your layout and references. 
      **/ 
      ImageView productImage = (ImageView) rootView.findViewById(R.id.cart_pro_image); 
      productImage.setImageDrawable(POJO.getProductImagePath()); 
     } 
    } 

Luego pasan a través de las referencias ActivityClass.java

public class MyCartActivity extends AppCompatActivity{ 
     POJO pojo; 
     CustomAdapter customAdapter; 
     ArrayList<POJO> cartList = new ArrayList<POJO>(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.your_layout); 

      customAdapter = new CustomAdapter(this, cartList); 

      pojo = new POJO(getResources().getDrawable(R.drawable.help_green)); 

    } 
} 
1

Todas las respuestas publicadas no se aplican en la actualidad. Por ejemplo, getDrawable() está en desuso. Aquí hay una respuesta actualizada, ¡salud!

ContextCompat.getDrawable(mContext, drawable) 

Desde método documentado

contexto android.graphics.drawable.Drawable public static final getDrawable (@NotNull android.content.Context,
@ android.support.annotation.DrawableRes int id

-1

btnImg.SetImageDrawable (GetDrawable (Resource.Drawable.button_round_green));

API 23 Android 6.0

Cuestiones relacionadas