elementi di una gridview appaiono in ordine casuale invece di quello deciso da me

marcellino247

Nuovo Utente
4 Mag 2015
10
0
1
Salve a tutti, io ho un problema con una gridView di immagini.
Ho messo tutte le immagini in un array, ma quando la griglia viene visualizzata le immagini risultano messe a caso invece che nell'ordine che ho deciso.
Questo è il mio codice, implementato ispirandomi a vari tutorial trovati in giro (sì, sono nuovo sia in Android che nella programmazione in generale):

la main activity:

Codice:
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Clicca sull'immagine per ingrandire"
        android:id="@+id/textView2"
        android:layout_gravity="center_horizontal"
        android:textAlignment="center"
        android:paddingBottom="10sp"
        android:textColor="@color/white"
        android:textSize="@dimen/text_size"/>

    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/grid_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:numColumns="auto_fit"
        android:columnWidth="300dp"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp"
        android:gravity="center"
        android:stretchMode="columnWidth" >
    </GridView>


il relativo codice java:

Codice:
package ...;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;

public class Bambini14 extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bambini14);

        GridView gridView = (GridView) findViewById(R.id.grid_view);

        // Instance of ImageAdapter Class
        gridView.setAdapter(new ImageAdapter(this));

        /**
         * On Click event for Single Gridview Item
         * */
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {

                // Sending image id to FullScreenActivity
                Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
                // passing array index
                i.putExtra("id", position);
                startActivity(i);
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}


L'Image Adapter:

Codice:
package com.example.valeria.Flexibilia_abbigliamento_per_danze_caraibiche_by_DDLAB;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    // Keep all Images in array
    public Integer[] mThumbIds = {
            R.drawable.max27a1ridotta, R.drawable.max27b1ridotta,
            R.drawable.bambini14max27c1ridotta, R.drawable.bambini14max29a1ridotta,
            R.drawable.bambini14max29b1ridotta, R.drawable.bambini14max30a1ridotta,
            R.drawable.bambini14max30b1ridotta, R.drawable.bambini14max33a1ridotta,
            R.drawable.bambini14max33b1ridotta, R.drawable.bambini14max36a1ridotta,
            R.drawable.bambini14max38a1ridotta, R.drawable.bambini14max38b1ridotta,
            R.drawable.bambini14max281ridotta, R.drawable.bambini14max311ridotta,
            R.drawable.bambini14max321ridotta, R.drawable.bambini14max341ridotta,
            R.drawable.bambini14max351ridotta, R.drawable.bambini14max371ridotta,
            };

    // Constructor
    public ImageAdapterBambini14(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int position) {
        return mThumbIds[position];
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setImageResource(mThumbIds[position]);
            imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

            imageView.setLayoutParams(new GridView.LayoutParams(350, 300));
        } else {
            imageView = (ImageView) convertView;
        }


        return imageView;
    }
}

Come dicevo, viene visualizzata una griglia con il giusto numero di elementi, ma le immagini al loro interno sono casuali invece che nell'ordine da me scelto, molte vengono anche ripetute più volte.
Essendo che sono un pivellino, con tutto questo codice preso qua e là magari ho semplicemente messo più codice di quello che ci vorrebbe, o chissà che altro.
Qualcuno riesce a capire dove potrebbe essere l'errore?
Grazie!
 
risolto, ecco il codice corretto:

Codice:
if(convertView ==null){
imageView =newImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setLayoutParams(newGridView.LayoutParams(350,300));
}else{
imageView =(ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
 

Discussioni simili