Search code examples
androidgrid-layoutandroid-gridlayout

Repeating same data in GridLayout for all Adapter items


In Grid Layout I am populating 46 data(Name and Image) but only first 6 data repeating again and again.

 public View getView(int position, View convertView, ViewGroup parent) {
      // TODO Auto-generated method stub
      View grid;
      LayoutInflater inflater = (LayoutInflater) mContext
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

      if (convertView == null) {

          grid = new View(mContext);
          grid = inflater.inflate(R.layout.grid_item, null);
          TextView textView = (TextView) grid.findViewById(R.id.txtTitle);
          ImageView imageView = (ImageView)grid.findViewById(R.id.imgGrid);
          textView.setText(web[position]);
          imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
         // imageView.setBackgroundResource(web[position]);
          Glide.with(mContext).load(Imageid[position]).into(imageView);
      } else {
          grid = (View) convertView;//setBackground(Imageid[position]);
      }

      return grid;
  }

Solution

  • Use ViewHolder for initialise Grid cell as give below

     public class Viewholder {
            TextView textView;
            ImageView imageView
        }
    

    and change your getView() method like this

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Viewholder holder;
        if (convertView == null) {
    
            holder = new Viewholder();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.grid_list_item, null);
    
           holder.textView = (TextView) convertView.findViewById(R.id.txtTitle);
         holder.imageView = (ImageView)convertView.findViewById(R.id.imgGrid);
    
    
            convertView.setTag(holder);
    
        } else {
    
            holder = (Viewholder) convertView.getTag();
        }
    
        holder.textView.setText(web[position]);
          holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
               Glide.with(mContext).load(Imageid[position]).into(holder.imageView);
    
        return convertView;
    }