Set a drawable as background programmatically

2020-06-02 13:46发布

EDIT: Sorry I realise 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:

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

3条回答
Explosion°爆炸
2楼-- · 2020-06-02 14:31

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

查看更多
祖国的老花朵
3楼-- · 2020-06-02 14:43

Try this

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

or

iv.setBackgroundResource(R.drawable.img);
查看更多
别忘想泡老子
4楼-- · 2020-06-02 14:44

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));
    }
查看更多
登录 后发表回答