Set a drawable as background programmatically

EDIT: Sorry i realize from your comment my question was not clear enough. I will post a new one. Sorry for this and thanks for your answers

I am populating a listview from a Json file.
With my listadapter, I can easily assign appropriate json data to each row of my list. That works well for text, for example:

  • Android theme not being set
  • android.view.InflateException: Binary XML file line #12: Error inflating class <unknown>
  • How to get Resource Name from Resource id
  • Download multiple files with a progress bar in ListView Android
  • Build android project with Jenkins:Could not initialize analytics
  • Restore android app stack from background
  • TextView tv = (TextView)ll.findViewById(R.id.descView);   
    tv.setText(i.desc);
    

    With the above code, every row will be correctly populated by the good json data.

    However, I don’t manage to do the same thing for an image. I have tried to set the right image from my json data using this:

    ImageView iv = (ImageView)ll.findViewById(R.id.imgView);           
    iv.setBackgroundDrawable(context.getResources().getDrawable(i.img));
    

    I guess I am doing something wrong with the type of my parameters: “setBackgroundDrawable” requires a drawable parameter.
    “getDrawable” requires an int.
    I have set the type of my field img to int, but that doesn’t work.

    Any idea why?

    My list adapter:

    public class adapter extends ArrayAdapter<ListItems> {
    
    int resource;
    String response;
    Context context;
    
    //Initialize adapter
    public ListItemsAdapter(Context context, int resource, List<ListItems> items) {
        super(context, resource, items);
        this.resource=resource; 
    }     
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
    
        //Get the current object
        ListItems i = getItem(position);
    
        //Inflate the view
        if(convertView==null)
        {
            ll = new LinearLayout(getContext());
            String inflater = Context.LAYOUT_INFLATER_SERVICE;
            LayoutInflater li;
            li = (LayoutInflater)getContext().getSystemService(inflater);
            li.inflate(resource, ll, true);
        }
        else
        {
            ll = (LinearLayout) convertView;
        }
    
        //For the message
        TextView tv = (TextView)ll.findViewById(R.id.descView);
        tv.setText(i.desc);
    
    // For the Img
        ImageView iv = (ImageView)ll.findViewById(R.id.imgView);
        iv.setBackgroundDrawable(context.getResources().getDrawable(i.img));
    
        return ll;
    }
    

    my item class:

        public class ListItems{
    int id;
    int img;    
    String desc;}
    

    And a sample of my json file:

        [{"id":10001,"img":e1,"desc":"desc1"},
        {"id":10002,"img":e2,"desc":"desc2"},
        {"id":10003,"img":e3,"desc":"desc3"}]
    

  • Gettextbounds in android
  • Endless RecyclerView with ProgressBar for pagination
  • What are the fees to develop on iOS, Android and WP?
  • Access to environment variables from Android Studio gradle build
  • Android ListView Adapter notifyDataSetInvalidated() vs notifyDataSetChanged()
  • Line Break in XML formatting?
  • 3 Solutions collect form web for “Set a drawable as background programmatically”

    Try this

    iv.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.img));
    

    or

    iv.setBackgroundResource(R.drawable.img);
    

    Now as getDrawable and setBackgroundDrawable both are depricated you should set drawable as Background like this :

    view.setBackground(ContextCompat.getDrawable(this, R.drawable.your_drawable)); 
    

    and if you are targating minSdk below 16 then make a check like this :

    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackgroundDrawable(ContextCompat.getDrawable(this, R.drawable.your_drawable));
        } else {
            view.setBackground(ContextCompat.getDrawable(this, R.drawable.your_drawable));
        }
    

    Here the new Method

    recyclerView.setBackgroundResource(R.drawable.edit_text_button_shape);

    don’t use this it’s an old method
    recyclerView.setBackgroundDrawable(this.getResources().getDrawable(edit_text_button_shape));

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.