使用 Path 从可绘制的 Picasso 加载图像

Load Image with Picasso from drawable using Path

我想做的是从可绘制对象中加载一些图像。事实上,我想加载 R.drawable."string" 之类的图像,但遗憾的是找不到将字符串放入其中的方法。此外,该字符串是从 MySQL 数据库加载的。

在这里你可以看到代码。

public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder> {

    private Context mContext;
    private ArrayList<Product> mProducts;
    private OnItemClickListener mListener;

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        mListener = listener;
    }

    public ProductAdapter(Context context, ArrayList<Product> products) {
        mContext = context;
        mProducts = products;
    }

    @NonNull
    @Override
    public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.product, parent, false);
        return new ProductViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) {
        Product currentProduct = mProducts.get(position);
        String name = currentProduct.getName();
        String photo = currentProduct.getPhoto();
        double price = currentProduct.getPrice();

        holder.textViewName.setText(name);
        holder.textViewPrice.setText(price + "€");

        int id = mContext.getResources().getIdentifier(photo, "drawable", mContext.getPackageName());



        Picasso.get().load(id).into(holder.imageView);
    }

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

    public class ProductViewHolder extends RecyclerView.ViewHolder {

        public ImageView imageView;
        public TextView textViewName;
        public TextView textViewPrice;

        public ProductViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image_view);
            textViewName = itemView.findViewById(R.id.textViewName);
            textViewPrice = itemView.findViewById(R.id.textViewPrice);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mListener != null) {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                            mListener.onItemClick(position);
                        }
                    }
                }
            });

        }
    }
}

如您所见,我尝试了 int id = mContext.getResources().getIdentifier(photo, "drawable", mContext.getPackageName()); 我在谷歌搜索中发现的方法,但似乎不起作用...

非常感谢您提供的任何帮助。

我会建议另一种方法,而不是您需要使用的方法:您可以有一个条件,条件是 return 从 MySQL 数据库编辑什么,以及 return id (R.drawable.xx) 如下所示:

int id;

if(photo.equals("foo")) {
    id = R.drawable.foo;

} else if(photo.equals("bla")) {
    id = R.drawable.bla;

} else {
    id = // default id
}

Picasso.get().load(id).into(holder.imageView);

这样一来,每个可绘制对象在数据库中都有一个特定的映射。