2017-09-24 1 views
0

J'ai créé un GridView personnalisé. Cela fonctionne mais le i indique la mauvaise position dans le journal.Personnalisé GridView a la mauvaise position Android

La sortie du journal est 0,1,2,0 je me attends 0,1,2,3,4,5 Dans mon GridView tous les éléments sont là, mais les titres et les images mal après le 3ème élément. Lorsque j'appuie sur les éléments, j'obtiens le bon index.

Je suis nouveau sur Android. Y a-t-il un cache ou dois-je nettoyer le GridView? J'ai trouvé beaucoup de sujets similaires mais personne ne pouvait m'aider. Si vous avez besoin de plus de code s'il vous plaît faites le moi savoir.

public View getView(int i, View convertView, ViewGroup parent) { 
    View gridViewAndroid; 
    LayoutInflater inflater = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


    if (convertView == null) { 

     gridViewAndroid = new View(mContext); 
     gridViewAndroid = inflater.inflate(R.layout.course, null); 

     TextView textViewAndroid = (TextView) gridViewAndroid.findViewById(R.id.android_gridview_text); 
     ImageView imageViewAndroid = (ImageView) gridViewAndroid.findViewById(R.id.android_gridview_image); 

     String url = "xxx/" + courses.get(i).getImageName(); 
     Picasso.with(mContext).load(url).into(imageViewAndroid); 
     Log.d("IMAGE", "i" + i); 
     textViewAndroid.setText(courses.get(i).getName()); 
    } else { 
     gridViewAndroid = (View) convertView; 
    } 

    return gridViewAndroid; 
} 
+0

convertView sera recyclé à utiliser . Déplacez Log hors de l'instruction if else et vérifiez la position –

Répondre

2

Vos points de vue sont recyclés, c'est pourquoi ce problème se produit. essayez ci-dessous le code

Ajouter un support de vue à l'intérieur de votre adaptateur

static class ViewHolder { 
    TextView textViewAndroid; 
    ImageView imageViewAndroid; 
} 

Modifier votre getView() au-dessous du code

public View getView(int i, View convertView, ViewGroup parent) { 

    ViewHolder holder; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     convertView = inflater.inflate(R.layout.course, null); 
     holder = new ViewHolder(); 
     holder.textViewAndroid = (TextView) convertView.findViewById(R.id.android_gridview_text); 

     holder.imageViewAndroid = (ImageView) convertView.findViewById(R.id.android_gridview_image); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    String url = "xxx/" + courses.get(i).getImageName(); 
    Picasso.with(mContext).load(url).into(holder.imageViewAndroid); 
    Log.d("IMAGE", "i" + i); 
    holder.textViewAndroid.setText(courses.get(i).getName()); 
    return convertView; 
} 

Mettez la classe statique à l'intérieur de votre public class X extends BaseAdapter