16

编辑:对不起,我从您的评论中意识到我的问题还不够清楚。我会发布一个新的。对此感到抱歉,感谢您的回答

我正在从 Json 文件填充 ListView。

使用我的listadapter,我可以轻松地将适当的 json 数据分配给列表的每一行。这适用于文本,例如:

TextView tv = (TextView)ll.findViewById(R.id.descView);   
tv.setText(i.desc);

使用上面的代码,每一行都将被正确的 json 数据填充。

但是,我无法为图像做同样的事情。我尝试使用以下方法从我的 json 数据中设置正确的图像:

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

我想我的参数类型有问题:“setBackgroundDrawable”需要一个可绘制参数。“getDrawable”需要一个 int。我已将字段 img 的类型设置为 int,但这不起作用。

知道为什么吗?

我的列表适配器

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

我的物品类别

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

还有我的 json 文件示例:

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

4 回答 4

52

尝试这个

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

或者

iv.setBackgroundResource(R.drawable.img);
于 2013-05-16T13:52:08.530 回答
14

现在,getDrawablesetBackgroundDrawable应该depricated像这样将drawable设置为Background:

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

如果您将 minSdk定位在 16 以下,请进行如下检查:

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));
    }
于 2016-10-20T11:25:36.347 回答
1

如果要更改 ImageView image/src

  1. 在布局android:src="@drawable/img"app:srcCompat="@drawable/img"
  2. 以编程方式imageview.setImageResource(R.drawable.img);

如果你想改变 ImageView 的背景

  1. 在布局中android:background="@drawable/img"
  2. 以编程方式selectimg.setBackgroundResource(R.drawable.circle_filled);

这里的imageview是一个 ImageView 而img是一个可绘制的。

于 2022-02-12T10:32:17.403 回答
0

这里是新方法

recyclerView.setBackgroundResource(R.drawable.edit_text_button_shape);

不要使用它,这是一种旧方法

recyclerView.setBackgroundDrawable(this.getResources().getDrawable(edit_text_button_shape));
于 2017-05-02T17:33:50.773 回答