getView()的位置在BaseAdapter -Android重复 [英] getView() position is repeating in BaseAdapter -Android
问题描述
在我的Android应用我显示卡的列表。我使用BaseAdapter。所有卡都看到我的ListView的,但我得到的一个问题。
getView()
被称为反复位置由于第一卡不显示正确的图像。它是使用从第2至最后一张牌的图像。我花了一天时间来修复它。我去过很多计算器的答案,但没有运气。请帮助我。
@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
ViewHolder支架=无效;
LayoutInflater mInflater =(LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
尝试{
如果(convertView == NULL){
convertView = mInflater.inflate(R.layout.wallet_list_item,NULL);
持有人=新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(保持器);
}其他{
支架=(ViewHolder)convertView.getTag();
} WalletRowItem rowItem =(WalletRowItem)的getItem(位置); 如果(rowItem.getCard_name()。equalsIgnoreCase(吻)){ holder.cardIcon.setImageResource(R.drawable.logo);
holder.cardName.setText(吻);
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(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
mViewClickListener.onImageClicked(位置);
}
});
}其他{
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()); 如果(!TextUtils.isEmpty(rowItem.getCard_price())){
holder.cardPrice.setText($+ rowItem.getCard_price());
}其他{
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);
} //将形状绘制,使LIST_ITEM角落四舍五入。
ShapeDrawable footerBackground =新ShapeDrawable();
浮动[] =半径新的浮动[8];
半径[0] = 10;
半径[1] = 10;
半径[2] = 10;
半径[3] = 10;
footerBackground.setShape(新RoundRectShape(半径,NULL,NULL));
。footerBackground.getPaint()的setColor(holder.colorbg);
convertView.setBackgroundDrawable(footerBackground); INT红色=的Integer.parseInt(rowItem.getTitle_red());
INT绿色=的Integer.parseInt(rowItem.getTitle_green());
INT蓝色=的Integer.parseInt(rowItem.getTitle_blue());
holder.cardPrice.setTextColor(Color.rgb(红,绿,蓝));
holder.cardName.setTextColor(Color.rgb(红,绿,蓝)); }赶上(例外五){
e.getLocalizedMessage();
}
返回convertView;
}
我不知道它会解决这个问题,但我会建议始终使用毕加索
,其中的'吻'卡的情况下,因为它有它自己的方式来处理图像下载的取消鉴于回收的情况下(见的 https://square.github.io/picasso/ 了解更多详细信息)
这可以通过更换完成
holder.cardIcon.setImageResource(R.drawable.logo);
按
Picasso.load(R.drawable.logo).into(holder.cardIcon);
In my Android Application I am showing a list of Cards. I am using BaseAdapter. All cards are visible to me on the ListView but I am getting an issue.
getView()
is called with repeated positions due to the first card not showing the correct image. It is using the image from the 2nd to last card. I spent a day to fix it. I visited many stackoverflow answers, but no luck. Help me please.
@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;
}
I'm not sure it will fix the issue, but I'd suggest to always use Picasso
, including the case of the 'Kiss' cards, because it has its own way to handle cancellation of image download in case of view recycling (see https://square.github.io/picasso/ for more details)
That can be done by replacing
holder.cardIcon.setImageResource(R.drawable.logo);
by
Picasso.load(R.drawable.logo).into(holder.cardIcon);
这篇关于getView()的位置在BaseAdapter -Android重复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!