所以我有一个带有三个片段的应用程序,我可以用标签切换。其中一个选项卡/片段是“Feed”,其中包含来自firebase数据库的用户的图片。图片存储为Firebase存储项的链接。 Glide在这个片段中运行得非常好。我现在正尝试使用另一个与Feed标签相同的RecyclerView在另一个标签/片段中添加一个图库功能,但它不起作用。
这是我的Gallery片段中的onCreateView:
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.gallery_fragment, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.galleryRecyclerView);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
// This list is populated by a Firebase childEvent listener
imageIDs = new ArrayList<>();
adapter = new MyGalleryAdapter2(imageIDs);
recyclerView.setAdapter(adapter);
// Method that retrieves the images from the Firebase DB (works)
getGalleryDB();
return view;
}
我已经调试并确保ArrayList填充了工作图像链接(其中16个)。
这是我的GalleryAdapter类:
public class MyGalleryAdapter2 extends RecyclerView.Adapter<MyGalleryAdapter2.MyViewHolder> {
List<String> images;
public static class MyViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public MyViewHolder(View v) {
super(v);
imageView = (ImageView)v.findViewById(R.id.gallery_image);
}
}
public MyGalleryAdapter2(List<String> images){
this.images = images;
}
@Override
public void onBindViewHolder(MyGalleryAdapter2.MyViewHolder holder, final int position) {
// This doesn't work
Glide.with(holder.imageView.getContext()).load(images.get(position)).into(holder.imageView);
// holder.imageView.setImageResource(R.drawable.gallery_icon); This works for some reason
}
@Override
public MyGalleryAdapter2.MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = (View) LayoutInflater.from(parent.getContext())
.inflate(R.layout.gallery_item, parent, false);
MyGalleryAdapter2.MyViewHolder vh = new MyGalleryAdapter2.MyViewHolder(v);
return vh;
}
@Override
public int getItemCount(){
return images.size();
}
}
在“onBindViewHolder”方法中,glide不会出于某种原因将图像加载到ImageView中。我试过调试,那时链接是正确的。我还尝试将图像资源设置为本地图像,并使用其中16个图像(从数据库中检索的图像数量)填充RecyclerView。
这个问题100%与Glide有关,但我无法弄清楚。任何帮助将不胜感激。我一直把头发拉过来。
你为Glide编写了错误的代码。
在适配器中,您使用此代码加载图像
Glide.with(context).load(images.get(position)).into(holder.imageView);
在Fragment中,您使用此代码加载图像
Glide
.with(myFragment)
.load(url)
.centerCrop()
.into(myImageView);
使用此代码加载Firebase图像
FirebaseStorage u = FirebaseStorage.getInstance().getReference().child("photos/" + auth);
Glide.with(getApplicationContext())
.using(new FirebaseImageLoader())
.load(u)
.into(ivm);
我希望这可以帮到你!
谢谢。
尝试将片段中的上下文传递给适配器并使用它
替换这个Glide.with(holder.imageView.getContext()).load(images.get(position)).into(holder.imageView);
同
Glide.with(context).load(images.get(position)).into(holder.imageView);
要使用Glide加载图像,请试试这个从firebase加载位图
Glide.with(context)
.load(images.get(position))
.into(
new CustomTarget<Drawable>() {
@Override
public void onResourceReady(
@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
holder.imageView.set(resource);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
//set placeholder if any
}
});