android - getView() 位置在 BaseAdapter -Android 中重复

标签 android baseadapter

在我的 Android 应用程序中,我显示了卡片列表。我正在使用 BaseAdapter。我在 ListView 上可以看到所有卡片,但我遇到了问题。

getView() 由于第一张卡片未显示正确的图像而被重复位置调用。它使用从第二张到最后一张卡片的图像。我花了一天时间修好它。我访问了许多 stackoverflow 答案,但没有运气。请帮助我。

 @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;
}

最佳答案

我不确定它会解决问题,但我建议始终使用 Picasso,包括“亲吻”卡片的情况,因为它有自己的方式来处理取消 View 回收时的图像下载(有关更多详细信息,请参见 https://square.github.io/picasso/)

这可以通过替换来完成

holder.cardIcon.setImageResource(R.drawable.logo);

通过

Picasso.load(R.drawable.logo).into(holder.cardIcon);

关于android - getView() 位置在 BaseAdapter -Android 中重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33417128/

相关文章:

java - 在布局中强制 RecyclerView 到页面底部

java - 如何设置ImageResource列表<Item>

android - Fragment 在 ListView 上的 setAdapter 后消失

android - 即使应用程序被杀死,如何向 Android 设备发送推送通知?

java - java getData().getPixels() 是否有类似的 android 方法?

android - libwebviewchromium.so 上的 native 代码崩溃

android - 如何将 Intent 广播到特定的应用程序小部件?

android - 滚动时 ListView 图像发生变化

java - 如何访问 Adapter 类中的 Activity 对象

java - radiogroup.setOnCheckedListener 未按预期工作。(更改单选按钮的颜色)