当前位置: 首页 > 知识库问答 >
问题:

加载毕加索图像后,水平GridView/RecyclerView滚动位置重置

云季同
2023-03-14

我有一个HorizontalGridView,一切都工作得很好,但是我正在用毕加索加载图像,每当图像加载时,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;
}

}

共有1个答案

茅秦斩
2023-03-14

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

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

希望这能省去一些麻烦,因为我看到这个问题还没有找到正确的解决方案。

 类似资料:
  • 我在我的回收站视图中有奇怪的行为,我不明白。我在我的OnBindViewHolder中使用以下代码() 我有五个项目在我的适配器,在位置2没有网址,仍然它加载图像有时但不总是。 还有一件事,我注意到有一个按钮“添加到购物车”,当点击时,它会刷新这个位置上的物品。所以,如果我在任何位置点击这个按钮,比如在位置5,然后再次点击位置2(我没有url),位置5的图像会在位置2加载。

  • 我正在使用毕加索图书馆。我知道,如果我将图片从URL加载到图像视图中,有一种回调方法。但我不想加载到imageview中。相反,我想将其另存为位图。所以我用了下面的代码 我怎样才能得到一个回调方法,知道我的图像是成功下载使用毕加索? 不要说位图对象的空检查。这会导致错误。

  • 我面临毕加索无法快速加载图像的问题。 有3个显示左、中、右图像。在快进/后退时,对于给定的时间点,选择左、中、右并显示在三个框中。 这是初始化。缓存是100MB以及99MB的 窗口移动的图像数是3000。所以我将图像预加载为 平均图像大小为10KB-320x180,因此达到35MB,小于99MB。 当快速循环工作时,许多图像是(来自)和(来自),但在几个快速循环之后,3个图像冻结或变得非常慢。此时

  • 我有一个从服务器加载映像的项目。我这样用毕加索, 多谢了。

  • 我可以使用Picasso库从文件系统加载图像吗? 我正在使用让用户从他的图库中选择一张照片,然后想要显示所选图像。 我已经有了获取图像文件系统Uri的工作代码,但无法获取毕加索。load()方法工作。

  • 我有下面的代码来加载毕加索的图像,在下载图像时使用可绘制的占位符来显示图像。不过,我想要的是一个动画旋转进度条样式的微调器,它可以在图像加载时不断地旋转,就像我在大多数专业应用程序中看到的那样。毕加索似乎不支持这一点,只支持静态图像绘制。有没有办法让它与毕加索合作,或者我必须做些不同的事情?