mos*_*321 5 java android picasso android-recyclerview
我有一个HorizontalGridView,一切都运行良好,但是我用Picasso加载图像,每当图像加载时,HorizontalGridView都会回到第一个项目/起始滚动位置.我还在活动上有一个地图片段,并注意到当地图与之交互时,HorizontalGridView会显示相同的行为.下面是适配器代码.请帮忙,现在已经坚持了几天......
public class GridElementAdapter extends RecyclerView.Adapter<GridElementAdapter.SimpleViewHolder>{
private Context context;
private Deal[] mDeals;
public GridElementAdapter(Context context, Deal[] deals){
    this.context = context;
    this.mDeals = deals;
}
public static class SimpleViewHolder extends RecyclerView.ViewHolder {
    public final ImageView dealImage;
    public final TextView dealTitle;
    public final TextView dealSubtitle;
    public final TextView dealPrice;
    public final TextView dealTime;
    public final TextView dealDays;
    public SimpleViewHolder(View view) {
        super(view);
        dealImage = (ImageView) view.findViewById(R.id.gridDealImageView);
        dealTitle = (TextView) view.findViewById(R.id.gridTitleLabel);
        dealSubtitle = (TextView) view.findViewById(R.id.gridSubtitleLabel);
        dealPrice = (TextView) view.findViewById(R.id.gridPriceLabel);
        dealTime = (TextView) view.findViewById(R.id.gridAvailableTimeLabel);
        dealDays = (TextView) view.findViewById(R.id.gridAvailableDaysLabel);
    }
}
@Override
public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    final View view = LayoutInflater.from(this.context).inflate(R.layout.deal_grid_item, parent, false);
    return new SimpleViewHolder(view);
}
@Override
public void onBindViewHolder(SimpleViewHolder holder, final int position) {
    String dealImageUrl = "http://api.cheapeat.com.au/deals/" + mDeals[position].getPhotoId() + "/photo";
    Context context = holder.dealImage.getContext();
    Picasso.with(context).load(dealImageUrl).placeholder(R.drawable.deal_image_placeholder).into(holder.dealImage);
    holder.dealTitle.setText(mDeals[position].getName());
    holder.dealPrice.setText(mDeals[position].getPriceData());
    holder.dealSubtitle.setText(mDeals[position].getDescription());
    holder.dealTime.setText(mDeals[position].getAvailabilityTime());
    holder.dealDays.setText(mDeals[position].getFormattedAvailableDays(mDeals[position].getAvailabilityDay()));
}
@Override
public long getItemId(int position) {
    return position;
}
@Override
public int getItemCount() {
    return this.mDeals.length;
}
Run Code Online (Sandbox Code Playgroud)
}
所以我终于设法解决了这个问题。原来我没有LayoutManager为HorizontalGridView. 具体来说,在我设置适配器的活动中:
// Had this
horizontalGridView = (HorizontalGridView) findViewById(R.id.gridView);
GridElementAdapter adapter = newGridElementAdapter(VenueProfileActivity.this, mDeals);
horizontalGridView.setAdapter(adapter);
// This needed to be added
HorizontalGridView.LayoutManager layoutManager = new LinearLayoutManager(VenueProfileActivity.this, LinearLayoutManager.HORIZONTAL, false);
horizontalGridView.setLayoutManager(layoutManager);
horizontalGridView.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)
希望这可以避免一些麻烦,因为我已经看到这个问题在没有正确解决方案的情况下四处流传。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           831 次  |  
        
|   最近记录:  |