【发布时间】:2019-08-06 01:02:43
【问题描述】:
所以我有一个包含三个片段的应用程序,我可以使用选项卡进行切换。选项卡/片段之一是“Feed”,其中包含来自 firebase 数据库的用户图片。图片存储为 Firebase 存储项目的链接。 Glide 在这个片段中工作得非常好。我现在正在尝试使用另一个 RecyclerView 在另一个选项卡/片段中添加一个画廊功能,这与提要选项卡几乎相同,但它不起作用。
这是我的画廊片段中的 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 中。我尝试调试,此时链接是正确的。我还尝试将图像资源设置为本地图像,并且 RecyclerView 填充了 16 个这些图像(从数据库中检索到的图像数量)。
这个问题 100% 与 Glide 有关,但我就是想不通。任何帮助将不胜感激。我一直在努力解决这个问题。
【问题讨论】:
-
检查您使用的上下文 - holder.imageView.getContext()。如果为 null,则使用持有者上下文或片段上下文。
-
它不为空。它有价值。
-
你错过了调用 notifyDatasetChanged 方法。
标签: java android firebase fragment android-glide