【问题标题】:Is there a way to set the image from the drawable folder with my Json data, The data includes the name of the image in the drawable folder有没有办法用我的Json数据从drawable文件夹中设置图像,数据包括drawable文件夹中图像的名称
【发布时间】:2019-08-12 00:30:32
【问题描述】:
到目前为止,我没有崩溃。
String logoImage = JO.getString("logo");
if (JO.getString("logo") == "able")
{
channel.ivLogoPic.setImageResource(R.drawable.able);
}
问题是,它没有改变图像。
我已经尝试了 .setDrawable ,但也没有用。
String logoImage = JO.getString("logo");
if (JO.getString("logo") == "able")
{
//int drawable1 = R.drawable.abc;
channel.ivLogoPic.setDrawable(R.drawable.able);
}
【问题讨论】:
标签:
android
mysql
android-recyclerview
cardview
【解决方案1】:
虽然 [@sunil Sunny] 已经提到了一个帮助链接,但我还想在这里添加一些方便的解决方案。
请记住,在像您这样的情况下,此解决方案的效率将随着可绘制资源数量的增加而降低。意思是,如果要使用的可绘制对象不多,请执行此操作。
您可以首先在 recyclerview 适配器中获取可绘制对象作为全局变量:
int drawable1 = R.drawable.drawable1, drawable2 = R.drawable.drawable2 ...等
然后在onBindViewHolder() 内部,根据从 JSON 响应中获得的内容,简单地使用资源。
喜欢:
if(logo == 1)
{
logoImageView.setDrawable(drawable1);
}
需要注意的一个优点是您可以轻松更改可绘制对象,而不必在资源文件和 API 中更改名称。意思是,将两者解耦。
PS:这里写的代码仅供参考。
【解决方案2】:
我在我的 backgroundTask.Java 文件中发现了它
while (count<jsonArray.length())
{
JSONObject JO = jsonArray.getJSONObject(count);
count++;
Channel channel = new Channel(JO.getString("name"),JO.getString("logo"));
Channel logoImage = new Channel(JO.getString("logo"));
if (logoImage.equals("axle"))
{
channel.ivLogoPic.setImageResource(R.drawable.axle);
然后我必须在适配器中设置更改
if(channel.getLogo().equals("axle")){
holder.ivLogoPic.setImageResource(R.drawable.axle);
}