gridview 滚动不正确呈现(适当)

gridview scrolling doesn't render correctly (appropriate)

我对 android gridview 有一个奇怪的问题。我为我的 gridview 实现了一个自定义适配器,并从 Rest API 加载数据。根据来自服务器的布尔标志更改 gridview 的设计。 gridview 有一个 onScrollListener,它从 api 获取更多数据并重置适配器。问题是当我滚动太多(例如加载 5 倍)时结果变得错误,我的意思是呈现的结果不是我所期望的。奇怪的是,当我返回并向上滚动时,其他结果缺少某些部分(例如折扣箱部分消失了)。

我 post 我的自定义适配器 class 代码:

public class GridItemAdapter extends BaseAdapter {

private LayoutInflater inflater = null;
private Context mContext;
List<SimpleItem> SimpleItems;

public GridItemAdapter(Context mcontext, List<SimpleItem> SimpleItems) {
    this.mContext = mcontext;
    this.SimpleItems = SimpleItems;
    inflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return SimpleItems.size();
}

@Override
public Object getItem(int position) {
    return SimpleItems.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

public void addItems(List<SimpleItem> SimpleItems) {
    this.SimpleItems.addAll(SimpleItems);
    notifyDataSetChanged();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.grid_item, null);
    }
    SimpleItem item = SimpleItems.get(position);
    TextView title = (TextView) convertView.findViewById(R.id.title);
    title.setText(item.getTitle());
    TextView territory = (TextView) convertView.findViewById(R.id.territory);
    territory.setText(item.getTitle());
    ImageView thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail);
    Picasso.with(mContext)
            .load(item.getThumbnail())
            .placeholder(R.drawable.noimage)
            .into(thumbnail);
    TextView price = (TextView) convertView.findViewById(R.id.price);
    price.setText(item.getPrice());
    if (item.getHasDiscount()) {
        TextView discount = (TextView) convertView.findViewById(R.id.discount);
        discount.setText(item.getDiscount());
    } else {
        LinearLayout discountbox = (LinearLayout) convertView.findViewById(R.id.discountbox);
        price.setBackgroundColor(Color.parseColor("#07000000"));
        discountbox.setVisibility(View.GONE);
    }
    return convertView;
}

}

澄清示例:我希望折扣箱在项目中可见,但滚动时没有,折扣箱也没有出现。或者当它一开始正确呈现时,当我向下滚动更多并返回时它消失了:(

如果有人帮助我,我将不胜感激。我以某种方式怀疑 gridview 回收,但是......

尝试对代码进行此更改,看看它是否解决了问题,它只是调用以设置折扣框可见

          if (item.getHasDiscount()) {
              TextView discount = (TextView) convertView.findViewById(R.id.discount);
              discountbox.setVisibility(View.VISIBLE);
              discount.setText(item.getDiscount());
          } else {
              LinearLayout discountbox = (LinearLayout) convertView.findViewById(R.id.discountbox);
              price.setBackgroundColor(Color.parseColor("#07000000"));
              discountbox.setVisibility(View.GONE);
          }