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);
}
我对 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);
}