Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

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

Discussione in 'Development' iniziata da marcellino248, 18 Mag 2015.

Condividi questa Pagina

  1. marcellino248

    marcellino248 Baby Droid

    Iscritto:
    4 Mar 2015
    Messaggi:
    18
    "Mi Piace":
    0
    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!
     
    Ultima modifica di un moderatore: 18 Mag 2015
  2. Cristian

    Cristian Power Droid

    Iscritto:
    25 Feb 2013
    Messaggi:
    14.769
    "Mi Piace":
    5.672
    marcellino248 ciao il tuo Thread era finito in moderazione percio' ho dovuto modificare il Thread nelle finestre del codice dove avevi scritto la parola -> "Override" con una @ davanti.

    "Override" è il Nome di un profilo utente presente nel nostro forum, se metti la -> @ seguita da "Override" vai ha menzionare quell'utente. quindi ho rimosso le varie @. (non ho toccato altro) ciao ;)
     
  3. marcellino248

    marcellino248 Baby Droid

    Iscritto:
    4 Mar 2015
    Messaggi:
    18
    "Mi Piace":
    0
    Ah non lo sapevo, la prossima volta starò più attento!
    nel frattempo ho 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;