2016-06-05 2 views
1

나는 recyclerview에서 이미지를 표시하는 데 picasso를 사용하지만 이미지로드가 완료되면 항목을 자동 새로 고치지 않으므로 이미지를 표시하도록 수동으로 스크롤해야합니다. 내가 무엇을 수정해야합니까, recyclerview의 항목을 자동으로로드를 완료하면 디스플레이를 업데이 트합니까?로드가 완료되면 recyclerview의 Picasa가 자동으로 디스플레이를 새로 고칠 수 없습니까?

이 내 어댑터 클래스입니다 :


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

관련 문제