getView()位置在BaseAdapter-Android中重复
在我的Android应用程序中,我显示了一个卡片列表。我正在使用BaseAdapter。我在ListView上可以看到所有卡片,但我遇到了一个问题 由于第一张卡没有显示正确的图像,因此使用重复的位置调用getView()位置在BaseAdapter-Android中重复,android,baseadapter,Android,Baseadapter,在我的Android应用程序中,我显示了一个卡片列表。我正在使用BaseAdapter。我在ListView上可以看到所有卡片,但我遇到了一个问题 由于第一张卡没有显示正确的图像,因此使用重复的位置调用getView()。它使用从第二张到最后一张卡的图像。我花了一天时间修理它。我访问了很多地方,但运气不好。请帮帮我 @Override public View getView(final int position, View convertView, ViewGroup parent) {
getView()
。它使用从第二张到最后一张卡的图像。我花了一天时间修理它。我访问了很多地方,但运气不好。请帮帮我
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
try {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.wallet_list_item, null);
holder = new ViewHolder();
holder.cardIcon = (ImageView) convertView.findViewById(R.id.img_wallet_card);
holder.cardName = (TextView) convertView.findViewById(R.id.tv_wallet_card_name);
holder.cardPrice = (TextView) convertView.findViewById(R.id.tv_wallet_card_price);
holder.cancel =(ImageView)convertView.findViewById(R.id.cancel);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
WalletRowItem rowItem = (WalletRowItem) getItem(position);
if(rowItem.getCard_name().equalsIgnoreCase("Kiss")){
holder.cardIcon.setImageResource(R.drawable.logo);
holder.cardName.setText("Kiss");
holder.cardPrice.setText("");
int bg_red=Integer.parseInt(rowItem.getBackground_red());
int bg_green=Integer.parseInt(rowItem.getBackground_green());
int bg_blue=Integer.parseInt(rowItem.getBackground_blue());
holder.colorbg=Color.rgb(bg_red, bg_green, bg_blue);
holder.cancel.setVisibility(View.VISIBLE);
holder.cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewClickListener.onImageClicked(position);
}
});
}else{
holder.cancel.setVisibility(View.INVISIBLE);
Picasso.with(context).load(rowItem.getCardImage_url()).error(R.drawable.success_icon).placeholder(R.drawable.plus_icon_actionbar).into(holder.cardIcon);
holder.cardName.setText(rowItem.getCard_name());
if(!TextUtils.isEmpty(rowItem.getCard_price())) {
holder.cardPrice.setText("$" + rowItem.getCard_price());
}else{
holder.cardPrice.setText("$" + "0.0");
}
int bg_red=Integer.parseInt(rowItem.getBackground_red());
int bg_green=Integer.parseInt(rowItem.getBackground_green());
int bg_blue=Integer.parseInt(rowItem.getBackground_blue());
holder.colorbg=Color.rgb(bg_red, bg_green, bg_blue);
}
//Make a shape drawable to make list_item corner rounded .
ShapeDrawable footerBackground = new ShapeDrawable();
float[] radii = new float[8];
radii[0] = 10 ;
radii[1] = 10 ;
radii[2] = 10 ;
radii[3] = 10 ;
footerBackground.setShape(new RoundRectShape(radii, null, null));
footerBackground.getPaint().setColor(holder.colorbg);
convertView.setBackgroundDrawable(footerBackground);
int red=Integer.parseInt(rowItem.getTitle_red());
int green=Integer.parseInt(rowItem.getTitle_green());
int blue=Integer.parseInt(rowItem.getTitle_blue());
holder.cardPrice.setTextColor(Color.rgb(red, green, blue));
holder.cardName.setTextColor(Color.rgb(red, green, blue));
} catch (Exception e) {
e.getLocalizedMessage();
}
return convertView;
}
我不确定它是否能解决这个问题,但我建议始终使用
毕加索
,包括“Kiss”卡的情况,因为它有自己的方式来处理取消图像下载的问题,以防视图回收(有关更多详细信息,请参阅)
这可以通过替换
holder.cardIcon.setImageResource(R.drawable.logo);
借
是不是只有图像是错的?还是文本?是的,它仅是图像。因此,您的意思是使用位置2调用getView,但行显示为位置3?您能否尝试更清楚地描述您的问题?由于第一张卡没有显示正确的图像,所以使用重复位置调用getView()的原因是什么?我不知道原因。这是一个很好的问题。您是否尝试从getView中删除image init代码,然后查看通话时间?感谢您的努力,我尝试了您的建议,但没有帮助。您能否编辑您的问题并更清楚地描述到底发生了什么?
Picasso.load(R.drawable.logo).into(holder.cardIcon);