Android / Firebase: Glide не работает внутри одного из моих фрагментов - PullRequest
0 голосов
/ 15 марта 2019

Итак, у меня есть приложение с тремя фрагментами, которые я могу переключать с помощью вкладок. Одна из вкладок / фрагментов - это «Лента», которая содержит изображения пользователей из базы данных 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" скольжение по какой-то причине не загружает изображения в ImageView. Я попробовал отладку, и ссылки верны на тот момент Я также попытался просто установить ресурс изображения для локального изображения, и RecyclerView заполняется 16 из этих изображений (количество изображений, извлеченных из базы данных).

Эта проблема на 100% связана с Glide, но я просто не могу понять. Любая помощь будет оценена. Я тянул волосы за это.

Ответы [ 3 ]

2 голосов
/ 15 марта 2019

Вы пишете неправильный код для Glide.

В Adapter вы загружаете изображение, используя этот код

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

Надеюсь, это поможет вам!

Спасибо.

0 голосов
/ 15 марта 2019

Для загрузки изображений с помощью 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
            }
          });
0 голосов
/ 15 марта 2019

Попробуйте передать контекст из вашего фрагмента в адаптер и используйте это

Замените это Glide.with(holder.imageView.getContext()).load(images.get(position)).into(holder.imageView);

на

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