Android/Firebase:滑行在我的一个碎片之一内不起作用



所以我有一个应用程序,其中包含三个片段,可以用选项卡进行切换。选项卡/片段之一是" feed",其中包含来自firebase数据库用户的图片。图片被存储为指向燃料存储项目的链接。在这个片段中,滑行非常好。我现在尝试使用另一个与Feed选项卡相同的RecyClerview在另一个选项卡/片段中添加画廊功能,但它不起作用。

这是我画廊片段中我的Createview:

    @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;
    }

我已经进行了调试,并确保驱动列表填充有工作图像链接(其中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张图像(从数据库中检索到的图像量)填充了回收库。

这个问题100%与Glide有关,但我无法弄清楚。任何帮助将不胜感激。我一直在将头发拉出。

您为Glide编写错误的代码。

在适配器中,您可以使用此代码加载图像

Glide.with(context).load(images.get(position)).into(holder.imageView);

在片段中您使用此代码加载图像

 Glide
    .with(myFragment)
    .load(url)
    .centerCrop()
    .into(myImageView);

使用此代码加载火箱图像

 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);

用于使用滑行加载图像的

,您可以尝试使用此图即可从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
            }
          });

我有一个相同的问题,事实证明它在清单文件中没有Internet许可。添加以下行解决了问题:

<uses-permission android:name="android.permission.INTERNET"/>

最新更新