首页 > 解决方案 > 如何在recyclerview中显示图像?

问题描述

我想在recyclerview中显示来自数组的图像,所以我将数组传递给适配器,但recyclerview没有绑定到适配器,因为我在“onBindViewHolder”中使用了“Log.d”,但日志没有显示消息。我的代码有什么问题吗?其他解决方案?

在片段中:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_plan, container, false);

    paths[0] = "/storage/emulated/0/demonuts_upload_gallery/1543839716755.jpg";
    paths[1] = "/storage/emulated/0/demonuts_upload_gallery/1543839716755.jpg";
    paths[2] = "/storage/emulated/0/demonuts_upload_gallery/1543839716755.jpg";
    paths[3] = "/storage/emulated/0/demonuts_upload_gallery/1543839716755.jpg";
    paths[4] = "/storage/emulated/0/demonuts_upload_gallery/1543839716755.jpg";

    adapter = new ImagesBodyAdapter(view.getContext());
    LinearLayoutManager layoutManager = new LinearLayoutManager(view.getContext(),LinearLayoutManager.HORIZONTAL, false);
    recyclerView = view.findViewById(R.id.recycler);
    recyclerView.setLayoutManager(layoutManager);
    adapter.addItems(paths);
    adapter.notifyDataSetChanged();
    recyclerView.setAdapter(adapter);

适配器类是:

public class ImagesBodyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private String[] PATHS = new String[5];

private Context context;

public ImagesBodyAdapter(Context context){
    this.context = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.image_body_item,viewGroup,false);
    return new ViewHolderItemDetail(view);
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
    //ViewHolderItemDetail holder = (ViewHolderItemDetail) viewHolder;

    Log.d("adapter","recycler binded!");

    for (int counter=0; counter<PATHS.length; counter++)
    {
        File imageFile = new  File(PATHS[i]);
        if(imageFile.exists()) {
            ((ViewHolderItemDetail) viewHolder).imageBody.setImageBitmap(BitmapFactory.decodeFile(imageFile.getAbsolutePath()));
        }
    }

}

public void addItems(String[] paths){
    for (int i=0; i<paths.length;i++){
        this.PATHS[i] = paths[i];
        notifyItemChanged(i);
       // notifyDataSetChanged();
    }
}
private class ViewHolderItemDetail extends RecyclerView.ViewHolder{
    ImageView imageBody;

    ViewHolderItemDetail(View v) {
        super(v);
        imageBody = v.findViewById(R.id.imageBody);
    }
 }

谢谢

标签: androidandroid-recyclerview

解决方案


使用这个图书馆:毕加索图书馆

并参考此链接将图像加载到 ImageView(在您的适配器 BindViewHolder 中)。很简单: 毕加索用例

编辑示例代码

Picasso.get().load("your/url/or/file/path").into(imageView);

编辑 2:您不能在适配器内部进行迭代。适配器负责一个 ViewHolder,只负责您要加载的一个图像。


推荐阅读