编辑:对不起,我从你的评论中发现我的问题不够明确。我会发一个新的。对不起,感谢您的回答
我正在从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”需要一个drawable参数。 “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"}]
答案 0 :(得分:40)
试试这个
iv.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.img));
或
iv.setBackgroundResource(R.drawable.img);
答案 1 :(得分:10)
现在getDrawable
和setBackgroundDrawable
都是depricated
,你应该将drawable设置为背景,如下所示:
view.setBackground(ContextCompat.getDrawable(this, R.drawable.your_drawable));
如果你在16岁以下 minSdk ,请按照以下方式进行检查:
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));
}
答案 2 :(得分:0)
这里是新方法
recyclerView.setBackgroundResource(R.drawable.edit_text_button_shape);
不要使用它,这是一种旧方法 recyclerView.setBackgroundDrawable(this.getResources()getDrawable(edit_text_button_shape));答案 3 :(得分:0)
这是我的工作方法。
RelativeLayout.setBackgroundResource(R.drawable.example);