android - 使用 Glide 在回收站视图中加载图像
问题描述
我正在尝试将图像从 firebase 加载到回收器适配器中并显示它们
我尝试了两种方法来尝试解决此问题,第一个代码块导致错误“您无法在 getActivity() 返回 null 的尚未附加的视图或片段上开始加载(这通常发生在 getActivity() 为在附加 Fragment 之前或在 Fragment 销毁之后调用)"
应用程序运行的第二种方法,但没有通过读取其他类似问题加载图像我已经看到了 isAdded() 检查,但我似乎无法让它工作,图像被上传到 firebase 中名为 post_images 的文件夹中,其余的与帖子相关的数据(带有帖子的 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
保证为非空的字段,您可以从中获取上下文。
推荐阅读
- reactjs - 反应最小最大范围的年份选择器
- javascript - Javascript - 获取每个 selectpicker 选定值的自定义属性
- angular - Angular 10/11:找不到管道“ngrxPush”
- python - Python:仅将索引展平一级
- dynamics-crm - 无法在工作流 - CRM 中分配事件
- search - 在 Sitefinity 后端动态模块搜索中搜索标题以外的字段
- c# - NSwag 变更控制器说明
- gatsby - 生产 Gatsby 博客未在 MDX 文件中呈现 TailwindCSS 类
- javascript - 如何从两个/三个文件中获取差异并将它们组合到节点中?
- python - Pandas:使用混合数据类型对多级列进行排序