ListView View Holder returning duplicate rows multiple times

前端 未结 2 1781
悲哀的现实
悲哀的现实 2021-01-27 09:41

Here is my code,

View Holder Class :

private class ViewHolder {
            TextView tv1;
            TextView tv2;
            TextView tv3;
                    


        
相关标签:
2条回答
  • 2021-01-27 10:04

    I have updated your code. Try this.

     @Override
                public View getView(final int position, View convertView,
                        ViewGroup parent) {
                    ViewHolder holder = null;
                    View view = convertView;
                    if(view == null){
                        view = lInflater.inflate(R.layout.add_productqty_listitem, parent,
                                false);
                        holder = new ViewHolder();
                        holder.tv1 = (TextView) view
                                    .findViewById(R.id.add_product_label);
                        holder.tv2 = (TextView) view
                                    .findViewById(R.id.Product_Code_label);
                        view.setTag(holder);
    
                    }else{
                        holder = (ViewHolder) view.getTag();
                    }
                    Typeface font = Typeface.createFromAsset(ctx.getAssets(),
                                "gothic.ttf");
    
                        final ProductInfo product = data.get(position);
                        ctx.mProductIdList.add(product.getProductId());
                        try {
    
                            holder.tv1.setText(product.getProductName());
                            holder.tv1.setTypeface(font);
                            holder.tv1.setVisibility(View.VISIBLE);
    
                            holder.tv2.setTypeface(font);
                            holder.tv2.setVisibility(View.VISIBLE);
                            ...............
                            ...............
                            holder.edit_qty.setVisibility(View.VISIBLE);
    
    
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    return view;
    
                }
    
    0 讨论(0)
  • 2021-01-27 10:17

    Set the values once you get the holder object from getTag or first row initlization. so it should after if.. else condition checking Check the comment also i hve mentioned in getview Method after if.. else statment

    @Override
                public View getView(final int position, View convertView,
                        ViewGroup parent) {
                    ViewHolder holder = null;
                    View view = convertView;
                    if(view == null){
                        view = lInflater.inflate(R.layout.add_productqty_listitem, parent,
                                false);
    
                        holder = new ViewHolder();
                    try{   Typeface font = Typeface.createFromAsset(ctx.getAssets(),
                                "gothic.ttf");
                            holder.tv1 = (TextView) view
                                    .findViewById(R.id.add_product_label);
    
                            holder.tv1.setTypeface(font);
    
                            holder.tv2 = (TextView) view
                                    .findViewById(R.id.Product_Code_label);
                            holder.tv2.setTypeface(font);
    
                            view.setTag(holder);
    
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
    
                    }else{
                        holder = (ViewHolder) view.getTag();
                    }
    
    
         final ProductInfo product = data.get(position);
                        ctx.mProductIdList.add(product.getProductId());
          // set data , text and visibility option after getting holder from view's getTag()
    holder.tv1.setText(product.getProductName());
                            holder.tv1.setVisibility(View.VISIBLE);
                            holder.tv2.setVisibility(View.VISIBLE);
                            ...............
                            ...............
                            holder.edit_qty.setVisibility(View.VISIBLE);
                    return view;
    
    0 讨论(0)
提交回复
热议问题