java - Picasso 图像加载后,Horizo​​ntalGridView/RecyclerView 滚动位置会重置

标签 java android android-recyclerview picasso

我有一个 Horizo​​ntalGridView 并且一切正常,但是我正在使用 Picasso 加载图像,每当加载图像时,Horizo​​ntalGridView 都会快速回到第一个项目/开始滚动位置。我在 Activity 上也有一个 map fragment ,并注意到当与 map 交互时,Horizo​​ntalGridView 显示相同的行为。下面是适配器代码。请帮助,现在已经坚持了几天......

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

最佳答案

所以我终于设法解决了这个问题。原来我没有为 Horizo​​ntalGridView 设置 LayoutManager。具体来说,在我设置适配器的 Activity 中:

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

希望这能减轻一些头痛,因为我已经看到这个问题四处飘荡,但还没有正确的解决方案。

关于java - Picasso 图像加载后,Horizo​​ntalGridView/RecyclerView 滚动位置会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165996/

相关文章:

android - 在 Android 上刷新字幕文本

java - 转到在 RecyclerView 上选择的项目

android - Recyclerview - 如何在项目滑动时禁用垂直滚动 (fling)

java - 字符串循环问题

java - 从 Java ResultSet 获取 java.sql.RowId

android - onActivityResult 已弃用如何发送 startResolutionForResult

android - RecyclerView wrap_content

java - 如何跨多个 JVM 节点实现计数器的最简单/最快的方法

winapi - 如何在 Windows 上检测已安装的 Sun/Oracle JRE?

android - ExpandableListView子项高度问题