使用 Glide 在回收站视图中加载图像

Loading images in recycler view with Glide

我正在尝试将图像从 firebase 加载到回收适配器并显示它们

我尝试了两种方法来尝试解决这个问题,第一个代码块导致了错误"You cannot start a load on a not yet attached View or a Fragment where getActivity() returns null (which usually occurs when getActivity() is called before the Fragment is attached or after the Fragment is destroyed)"

第二种方法是应用程序 运行 但没有通过阅读其他类似问题加载图像 我已经看到 isAdded() 检查但我似乎无法让它工作图像正在上传到firebase 中的一个名为 post_images 的文件夹以及与 post 相关的其余数据(带有 posting 的 Instagram 类应用程序)在 firestore

public BlogRecyclerAdapter(List<BlogPost> blog_list) {

    this.blog_list = blog_list;

}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.blog_list_item, parent, false);
    return new ViewHolder(view);
}


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

    String desc_data = blog_list.get(position).getDesc();
    holder.setDescText(desc_data);

    String image_url = blog_list.get(position).getImage_url();
    holder.setBlogImage(image_url);

}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    private View mView;

    private TextView descView;
    private ImageView blogImageView;
    public Context mContext;

    public ViewHolder(View itemView) {
        super(itemView);
        mView = itemView;

    }

    public void setDescText(String descText) {

        descView = mView.findViewById(R.id.blog_desc);
        descView.setText(descText);

    }

    public void setBlogImage(final String downloadUri) {

        blogImageView = mView.findViewById(R.id.Post_image_view);
        Glide.with(mContext).load(downloadUri).into(blogImageView);


    }}}

尝试了其他方法

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        mImageStorage = FirebaseStorage.getInstance().getReference();

        final String current_uid = mCurrentUser.getUid();

        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
        mUserDatabase.keepSynced(true);

        mUserDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                StorageReference filepath = mImageStorage.child("profile_images").child(current_uid + (".jpeg"));
                Log.d("heere", "S");

                // This gets the download url async
                filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {

                        //The download url
                        final String downloadUrl = uri.toString();
                        Log.d("tag", downloadUrl);
                        if (!downloadUrl.equals("default")) {

                            Glide.with(mContext).load(downloadUrl).into(blogImageView);

                        //    Glide.with(getApplicationContext()).load(downloadUrl).into(mDisplayImage);


                        }
                    }});}

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });}}}

我希望图片显示在回收站视图中

更改此行

Glide.with(mContext).load(downloadUri).into(blogImageView);

改为:

Glide.with(itemView.getContext()).load(downloadUri).into(blogImageView);

所有 ViewHolder 个实例都有一个保证为非空的字段 itemView,您可以从中获取上下文。

  1. 你的mContext没有初始化
  2. mContext 必须是 RecyclerView.Adapter 全局变量而不是 ViewHolder 变量
  3. mContext必须这样在onCreateViewHolder函数中初始化

     this.mContext = parent.getContext();