java - 从android中的String Arraylist访问drawable文件

标签 java android json android-studio android-recyclerview

我对 Android 开发还很陌生,但我正在尝试使用如下 JSON 对象解析本地 JSON 文件:

     "pigs": [
{
  "name": "Duroc",
  "list_image": "duroc_list",
  "desc_image": "duroc_desc",
  "description": "The Duroc pig is an older breed of domestic pig. The breed was developed in the United States and formed the basis for many mixed-breed commercial hogs. Duroc pigs are reddish-brown, large-framed, medium length, and muscular, with partially-drooping ears. They tend to be one of the least aggressive of all swine breeds raised for meat."
},

我需要将图像专门从“list_image”存储到 RecyclerView 中,并且当单击图像时,其余信息存储在单独的 Activity 中。

当图像存储在本地可绘制文件夹中时,如何将图像放入 RecyclerView 中?

任何帮助将不胜感激!谢谢!!!

编辑:

将每个图像文件的名称存储在数组中后,即:“duroc_list”

    ArrayList<String> list_image = new ArrayList<>();
    ArrayList<String> name = new ArrayList<>();
    ArrayList<String> desc_image = new ArrayList<>();
    ArrayList<String> description = new ArrayList<>();

    try {
        JSONObject obj = new JSONObject(loadJSONFromAsset());
        JSONArray pigArray = obj.getJSONArray("pigs");

        for (int i = 0; i < pigArray.length(); i++) {

            JSONObject pigDetail = pigArray.getJSONObject(i);

            name.add(pigDetail.getString("name"));
            list_image.add(pigDetail.getString("list_image"));
            desc_image.add(pigDetail.getString("desc_image"));
            description.add(pigDetail.getString("description"));

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

如何在适配器中选择和使用数组中的每个项目以在 RecyclerView 中查看?

适配器:

   List<Integer> images;
LayoutInflater inflater;

public Adapter(Context context, List<Integer> images) {

    this.images = images;
    this.inflater = LayoutInflater.from(context);
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.grid_layout, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    holder.listPigs.setImageResource(images.get(position));
}

@Override
public int getItemCount() {
    return images.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView listPigs;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        listPigs = itemView.findViewById(R.id.image_list);
    }
}

最佳答案

您可以通过保存的名称从您的drawable res文件夹中获取drawable。例如,如果您的 res/drawable 文件夹中有 ic_home.png,您可以通过传递 "ic_home" 作为此方法的第一个参数.

public static Drawable getDrawable(String name, Context context) {
    int resourceId = context.getResources().getIdentifier(name, "drawable", context.getPackageName());
    return context.getResources().getDrawable(resourceId);
}

关于java - 从android中的String Arraylist访问drawable文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61092479/

相关文章:

c++ - 如何将 JsonObject 转换为 JSON 字符串?

json - 如何在 .net 核心类库中解析 JSON

java - AES 解密/加密为 256 位 key 抛出 'Illegal key size'

java - 代码优化安卓

Android,从内部数据库加载缓慢

json - 如何在 Jenkins 中处理 github webhook 有效负载?

java - JComboBox 子菜单项

java - ObjectOutputStream 对象有时会自动刷新。我如何才能准确地知道何时依赖此行为以及何时手动刷新?

java - 对于 JAMA 或其他库,将 List<List<Double>> 转换为 double[][]

android - 包重命名后出现 ClassNotFoundException