2017-07-31 1 views
1

Ceci est ma classe d'adaptateur personnalisée pour mon GridView. J'avais essayé d'optimiser la vitesse de défilement de la grille en faisant appel à une fois l'inflateur de mise en page et d'utiliser le support de vue, mais maintenant il est très lent à défiler.GridView défile très lentement

private Context mContext; 
private final String[] web; 
private final int[] Imageid; 

public CustomGrid(Context c, String[] web, int[] Imageid) { 
    mContext = c; 
    this.Imageid = Imageid; 
    this.web = web; 
} 

class MyViewHolder { 
    ImageView imageView; 
    TextView textView; 

    MyViewHolder(View v) { 
     imageView = (ImageView) v.findViewById(R.id.grid_image); 
     textView = (TextView) v.findViewById(R.id.grid_text); 
    } 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View grid = convertView; 
    MyViewHolder viewHolder; 

    if (grid == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     grid = inflater.inflate(R.layout.grid_single, null); 
     viewHolder = new MyViewHolder(grid); 
     grid.setTag(viewHolder); 
    } else { 
     grid = convertView; 
     viewHolder= (MyViewHolder) grid.getTag(); 
    } 
    viewHolder.textView.setText(web[position]); 
    viewHolder.imageView.setImageResource(Imageid[position]); 
    return grid; 
} 

Répondre

1

Je pense que votre code devrait fonctionner correctement. La seule cause possible est que les images que vous chargez sont si grandes que la mémoire ne peut pas les charger toutes en même temps.

Vous pouvez essayer avec une taille plus petite. Vous pouvez également utiliser Glide pour charger vos images, car elles redimensionnent les images en fonction de la taille d'ImageView.

1
  1. Utilisez recycleView pour de meilleures performances et un défilement en douceur. Utilisez Glide pour le chargement de l'image.