2016-06-05 3 views
1

Я использую picasso для отображения изображения в recyclerview, но он не будет автоматически обновлять элемент при загрузке изображения, я должен вручную прокрутить, чтобы изображение отображалось. Что я могу сделать, чтобы исправить это, чтобы автоматически обновлять элемент recyclerview дисплея при завершении загрузки?Picasso в recyclerview не может автоматически обновлять дисплей при полной загрузке?

это мой адаптер класса:


public class LocationListRecyclerViewAdapter extends RecyclerView 
     .Adapter<LocationListRecyclerViewAdapter 
     .DataObjectHolder> { 
    private static String LOG_TAG = "LocationListRecyclerViewAdapter"; 
    private ArrayList<LocationObject> mDataset; 
    private static MyClickListener myClickListener; 
    private Context mContext; 
    static String imageUrls; 
    public static String[] thumbnailUrl; 
    private LayoutInflater inflater; 


    public LocationListRecyclerViewAdapter(Context context, ArrayList<LocationObject> mDataset) { 
     this.mContext = context; 
     this.mDataset = mDataset; 

    } 


    public static class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     TextView locName; 
     TextView locAddress; 
     TextView locDistance; 
     RoundedImageView roundedImageView; 

     public DataObjectHolder(View itemView) { 
      super(itemView); 
      this.locName = (TextView) itemView.findViewById(R.id.location_name); 
      this.locAddress = (TextView) itemView.findViewById(R.id.location_address); 
      this.locDistance = (TextView) itemView.findViewById(R.id.location_distance); 
      this.roundedImageView = (RoundedImageView) itemView.findViewById(R.id.thumbnail_location); 

      Log.i(LOG_TAG, "Adding Listener"); 
      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      myClickListener.onItemClick(getAdapterPosition(), v); 
     } 
    } 

    public void setOnItemClickListener(MyClickListener myClickListener) { 
     this.myClickListener = myClickListener; 
    } 

    public LocationListRecyclerViewAdapter(ArrayList<LocationObject> myDataset) { 
     mDataset = myDataset; 
    } 

    @Override 
    public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.location_listcard_item, parent, false); 

     this.mContext = parent.getContext(); 
     thumbnailUrl = new String[10]; 

     TextView locName = (TextView) view.findViewById(R.id.location_name); 
     TextView locAddress = (TextView) view.findViewById(R.id.location_address); 
     TextView locDistance = (TextView) view.findViewById(R.id.location_distance); 
     Typeface helvetica = Typeface.createFromAsset(parent.getContext().getApplicationContext().getAssets(),"fonts/Helvetica.otf"); 
     locName.setTypeface(helvetica); 
     locAddress.setTypeface(helvetica); 
     locDistance.setTypeface(helvetica); 

     DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
     return dataObjectHolder; 
    } 

>  @Override 
>  public void onBindViewHolder(DataObjectHolder holder, int position) { 

     LocationObject item = mDataset.get(position); 

     holder.locName.setText(mDataset.get(position).getLocationName()); 
     holder.locAddress.setText(mDataset.get(position).getLocationAddress()); 
     holder.locDistance.setText(String.valueOf(mDataset.get(position).getLocationDistance())+"m"); 

     Log.i(position+" photos"," = "+mDataset.get(position).getLocationPhoto()); 

     //mContext 
     Picasso.with(holder.roundedImageView.getContext()).cancelRequest(holder.roundedImageView); 
     Picasso.with(holder.roundedImageView.getContext()) 
       .load(mDataset.get(position).getLocationPhoto()) 
       .error(R.drawable.placeholder) 
       .placeholder(R.drawable.placeholder) 
       .resize(200,200) 
       .into(holder.roundedImageView); 

     holder.itemView.setTag(item); 

    } 

    public void addItem(LocationObject dataObj, int index) { 
     mDataset.add(index, dataObj); 
     notifyItemInserted(index); 
    } 

    public void deleteItem(int index) { 
     mDataset.remove(index); 
     notifyItemRemoved(index); 
    } 


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

    public interface MyClickListener { 
     public void onItemClick(int position, View v); 
    } 


} 

ответ

1

Пусть Пикассо делать свою работу, вы не должны вмешиваться в процесс загрузки, библиотека сама знает, когда отменить запрос, если это необходимо.

Всегда полезно, прежде чем использовать библиотеку, внимательно изучите все ее тонкости использования. http://square.github.io/picasso/

@Override 
public void onBindViewHolder(DataObjectHolder holder, int position) { 
    LocationObject item = mDataset.get(position); 

    holder.locName.setText(item.getLocationName()); 
    holder.locAddress.setText(item.getLocationAddress()); 
    holder.locDistance.setText(String.valueOf(item.getLocationDistance())+" m"); 

    Picasso.with(mContext) 
      .load(item.getLocationPhoto()) 
      .placeholder(R.drawable.placeholder) 
      .resize(200,200) 
      .centerCrop() 
      .into(holder.roundedImageView); 
} 
+0

еще же братан, он не будет автоматически обновлять отображение элемента, но когда я прокрутить изображение chaged:/ – mozaex

+0

я удалить его братан, но до сих пор не работает, до сих пор привычка автоматически обновляют дисплей – mozaex