简体   繁体   English

如何在将图片加载到recyclerview项目中之前添加微调器

[英]how to add spinner before loading Images in recyclerview item

I am using Data Binding to Getting Layout and Glide Library to load Images from Adapter class. 我正在使用“数据绑定到获取布局和滑行库”从Adapter类加载图像。 Now I want to attach progress spinner before loading images on each row but currently, I don't know how to load ?? 现在,我想在每行加载图像之前附加进度条,但是目前,我不知道如何加载? Thanks 谢谢

Here is my Adapter class 这是我的适配器类

public class ImageSetAdapter extends RecyclerView.Adapter<ImageSetAdapter.PictureItemHolder> {

    List<HouseModelSet> data;
    HousesListener housesListener;

    public ImageSetAdapter(List<HouseModelSet> data) {
        this.data = data;
    }

    @Override
    public PictureItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
         /*View v = inflater.inflate(R.layout.item_home_picture, parent, false);
            ItemHomePictureBinding itemHomePictureBinding = DataBindingUtil.inflate(inflater, R.layout.item_home_picture, parent, false);*/

        ItemHomePictureBinding binding = ItemHomePictureBinding.inflate(inflater, parent, false);

        return new PictureItemHolder(binding.getRoot());
    }

       @Override
    public void onBindViewHolder(PictureItemHolder holder, final int position) {
       HouseModelSet houseSetModel = data.get(position);
       List<PostModel> postModels = houseSetModel.getHouseModels();
       if (postModels.size() > 4) {
           final PostModel hm1 = postModels.get(0);
           final PostModel hm2 = postModels.get(1);
           final PostModel hm3 = postModels.get(2);
           final PostModel hm4 = postModels.get(3);
           final PostModel hm5 = postModels.get(4);

           holder.binding.house1.setHouse(hm1);
           holder.binding.house2.setHouse(hm2);
           holder.binding.house3.setHouse(hm3);
           holder.binding.house4.setHouse(hm4);
           holder.binding.house5.setHouse(hm5);
           holder.binding.setHouses(houseSetModel);

           holder.binding.house1.getRoot().setOnClickListener(new View.OnClickListener(){
               @Override
               public void onClick(View v) {
                   if (housesListener != null) {
                       housesListener.onHouseClick(position, hm1);
                   }
               }
           });

           holder.binding.house2.getRoot().setOnClickListener(new View.OnClickListener(){
               @Override
               public void onClick(View v) {
                   if (housesListener != null) {
                       housesListener.onHouseClick(position, hm2);
                   }
               }
           });

           holder.binding.house3.getRoot().setOnClickListener(new View.OnClickListener(){
               @Override
               public void onClick(View v) {
                   if (housesListener != null) {
                       housesListener.onHouseClick(position, hm3);
                   }
               }
           });

           holder.binding.house4.getRoot().setOnClickListener(new View.OnClickListener(){
               @Override
               public void onClick(View v) {
                   if (housesListener != null) {
                       housesListener.onHouseClick(position, hm4);
                   }
               }
           });

           holder.binding.house5.getRoot().setOnClickListener(new View.OnClickListener(){
               @Override
               public void onClick(View v) {
                   if (housesListener != null) {
                       housesListener.onHouseClick(position, hm5);
                   }
               }
           });

       }
    }

    @BindingAdapter("app:imageUrl")
    public static void loadImage(ImageView imageView, String url) {
        Glide.with(imageView.getContext())
                .load(ApiHelper.BASE_URL + url)
                .thumbnail(0.5f)
                .crossFade()

                .into(imageView);
    }

    public void setHousesListener(HousesListener housesListener) {
        this.housesListener = housesListener;
    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    public class PictureItemHolder extends RecyclerView.ViewHolder{

        ItemHomePictureBinding binding;

        public PictureItemHolder(View itemView) {
            super(itemView);
            binding = DataBindingUtil.bind(itemView);
        }

    }

    public void updateList(List<HouseModelSet> list) {
        this.data = list;
        notifyDataSetChanged();
    }

    public interface HousesListener{
        void onHouseClick(int pos, PostModel houseModel);
    }
}

maybe you can add listener to showing the spinner progress. 也许您可以添加侦听器以显示微调器进度。

You can change your code to this : 您可以将代码更改为此:

Glide.with(imageView.getContext())
        .load(ApiHelper.BASE_URL + url)
.listener(new RequestListener<String, GlideDrawable>() {
    @Override
    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
        yourSpinnerProgress.setVisibility(View.GONE);
        return false;
    }

    @Override
    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
        yourSpinnerProgress.setVisibility(View.GONE);
        return false;
    }
})
.into(imageView);

And don't forget to use RelativeLayout for root of layout & add yourSpinnerProgress into your layout. 并且不要忘记使用RelativeLayout作为布局的根,并将yourSpinnerProgress添加到布局中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM