title: Items inside GridView getting repeated when screen scrolls
body: <p>I'm using a GridView to show a set of Categories that user can chose. Each item of the grid is consisted by an ImageView and a TextView, both retrieved from server. When an item is touched, another activity is started.</p>
  
  <p>I thought everything was going right, until I've noticed that some itens were getting repeated when I scrolls the screen. Whenever I scroll down trough the grid, and then back, itens change itś position and get duplicated. But even when I touch the messed up itens, the right values are send to the next activity. </p>
  
  <p>Looking in LogCat, any repeated request to server occurs. In fact, I've got this while scrolling:</p>
  
  <pre><code>06-28 12:36:38.554: D/dalvikvm(358): GC_EXTERNAL_ALLOC freed 2061 objects / 156024 bytes in 51ms
  06-28 12:36:42.915: D/dalvikvm(358): GC_FOR_MALLOC freed 6590 objects / 737528 bytes in 57ms
  06-28 12:38:26.725: D/dalvikvm(358): GC_EXTERNAL_ALLOC freed 5426 objects / 468176 bytes in 71ms
  06-28 12:38:26.875: D/dalvikvm(358): GC_EXTERNAL_ALLOC freed 409 objects / 17480 bytes in 68ms
  </code></pre>
  
  <p>Looks like everytime I scroll, itens get redraw...</p>
  
  <p>UPDATE: It only redraw itens on the first time I scroll down the GridView. After this, all itens, including repeated ones, keeps on its places.</p>
  
  <p>My java class:</p>
  
  <pre><code>public void proccess(){
      int qtdCategorias = json.length();
      imagens = new Drawable[qtdCategorias];
      categorias = new String[qtdCategorias];
      for (int i=0; i&lt;qtdCategorias; i++){
          JSONArray c = json.optJSONArray(i);
          String urlAmigavel = null;
          String imagemSite = null;
          String nomeCategoria = null;
          try {
              urlAmigavel = c.getString(6);
              imagemSite = c.getString(3);
              nomeCategoria = c.getString(2);
          } catch (JSONException e) {
              Log.e("CategoriasJogarActivity", e.toString());
              e.printStackTrace();
          }
          categorias[i] = nomeCategoria;
          imagens[i] = getImagem(urlAmigavel, imagemSite);
      }
  
  
      gridview = (GridView) findViewById(R.id.include3);
  
      ImageAdapter imageAdapter = new ImageAdapter(ctx, imagens, categorias);
  
      gridview.setAdapter(imageAdapter);
  
      gridview.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView&lt;?&gt; parent, View v,
                  int position, long id) {
  
              String name = null;
              String idt = null;
              try {
                  JSONArray c = json.optJSONArray(position);
                  name = c.getString(2);
                  idt = c.getString(0);
              } catch (JSONException e) {
                  Log.e("CategoriasJogarActivity",
                          "JSONException" + e.toString());
              }
  
              Intent in = new Intent(getApplicationContext(),
                      JogarActivity.class);
              in.putExtra(TAG_NAME, name);
              in.putExtra(TAG_ID, idt);
              in.putExtra(TAG_PRIMEIRAPERGUNTA, true);
              startActivity(in);
  
          }
      });
  }
  
  
  public Drawable getImagem(String urlAmigavel, String img) {
      String url = "http://www.qranio.com/pergunta/" + urlAmigavel + "/"+ img;
      InputStream is = null;
      try {
          URL urlImagem = new URL(url);
          is = (InputStream) getObjeto(urlImagem);
      } catch (MalformedURLException e1) {
          Log.e("CategoriasJogarActivity", e1.toString());
          e1.printStackTrace();
      }
      Drawable d = Drawable.createFromStream(is, "src");
  
      return d;
  }
  
  private Object getObjeto(URL url) {
      Object content = null;
      try {
          content = url.getContent();
      } catch (IOException e) {
          Log.e("CategoriasJogarActivity", e.toString());
          e.printStackTrace();
      }
      return content;
  }
  </code></pre>
  
  <p>imageAdapter class</p>
  
  <pre><code>public class ImageAdapter extends BaseAdapter{
  private Context mContext;
  private final Drawable[] mThumbIds;
  private final String[] mTextIds;
  
  
  public ImageAdapter(Context c, Drawable[] d, String[] s) {
      mContext = c;
      mThumbIds = d;
      mTextIds = s;
  }
  
  public int getCount() {
      return mThumbIds.length;
  }
  
  public Object getItem(int position) {
      return null;
  }
  
  public long getItemId(int position) {
      return 0;
  }
  
  //create a new ImageView for each item referenced by the Adapter
  public View getView(int position, View convertView, ViewGroup parent) {
      //ImageView imageView;
      View v;
      if (convertView == null) {  // if it's not recycled, initialize some attributes
          LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(     Context.LAYOUT_INFLATER_SERVICE );
          v = inflater.inflate(R.layout.gridview_item_layout, null);
          TextView text = (TextView)v.findViewById(R.id.grid_item_text);
          text.setText(mTextIds[position]);
          ImageView image = (ImageView)v.findViewById(R.id.grid_item_image);
          image.setImageDrawable(mThumbIds[position]);
  
  
      } else {
  
          v = (View) convertView;
      }
  
  
      return v;
  }
  
  
  }
  </code></pre>
  
  <p>gridview_item_layout xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/gridview_item_layout"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:gravity="center_horizontal" &gt;
  
  &lt;ImageView android:id="@+id/grid_item_image"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:scaleType="fitCenter"
  android:minHeight="100dip"
  android:minWidth="100dip"
  &gt;
  &lt;/ImageView&gt;
  
  &lt;TextView android:id="@+id/grid_item_text"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:text="TextView"
  android:gravity="center"
  android:textColor="#F9A512"
  android:textStyle="bold"
  android:textSize="18dp"
  &gt;
  &lt;/TextView&gt;
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>gridview xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;GridView xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/gridview"
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"
  android:numColumns="auto_fit"
  android:verticalSpacing="10dip"
  android:horizontalSpacing="10dip"
  android:stretchMode="columnWidth"
  android:gravity="center"
  android:background="#FFFFFF"
  android:padding="5dip"
  /&gt;
  </code></pre>
  
  <p>I saw other questions about this same issue, but none of them answered. Any ideas of what's happening?</p>