2016-10-15 17 views
0

データバインディングを使用してレイアウトとグライドライブラリを使用して、アダプタクラスからイメージをロードしています。今、各行にイメージをロードする前に進行スピナーを付けたいですが、現在、ロードする方法がわかりません。おかげrecyclerのアイテムを読み込む前にスピナーを追加する方法

ここでは私のアダプタクラスは、多分あなたは、スピナーの進行状況を示すにリスナーを追加することができます

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

答えて

2

です。

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

をそして、あなたのレイアウトにyourSpinnerProgressを追加し、レイアウト&のルートのためにRelativeLayoutを使用することを忘れないでください:

あなたは、このようにコードを変更することができます。

関連する問題