Autore Topic: Gallery e spinner  (Letto 376 volte)

Offline jonsnow81

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Gallery e spinner
« il: 29 Maggio 2013, 13:37:41 CEST »
0
Ciao a tutti, sto cercando di fare un'applicazione che mi permetta di selezionare delle immagini da una galleria, una volta cliccato su una di queste mi appare un'ImageView più grande relativa all'immagine selezionata. Insieme all'immagine devo far apparire delle componenti come una TextView con il nome relativo (fatto) e uno spinner che contenga dei campi da selezionare.
Ho impostato il progetto in modo che io abbia un LinearLayout statico con galleria e ImageView, al suo interno ho creato un altro Linear Layout vuoto per poterci inserire dinamicamente la TW e lo Spinner.
Fin qui tutto bene per l'Edit Text che mi appare come voglio io, benino anche per lo spinner che mi appare  e mi permette di selezionare l'opzione desiderata, il problema appare quando seleziono un'opzione, cambio immagine e poi ritorno all'immagine precedente.
Vorrei che tornando all'immagine nuova lo spinner mi ridia l'opzione che avevo selezionato in precedenza ma questo non succede.
Per come ho scritto il codice mi sono capitate due situazioni differenti:
inizialmente lo spinner mi si azzerava del tutto ad ogni clic su ogni immagine, provando a risolvere il problema ho ottenuto l'effetto contrario, ovvero che cambiando immagine mi rimane l'opzione selezionata precedentemente. In entrambi i casi è palese che l'opzione selezionata non è attaccata all'immagine che mi interessa ma sono due corpi estranei tra loro.

Vi copio e incollo il mio codice barbaro sperando che qualcuno possa darmi una mano a risolvere il dilemma, vorrei capire se esiste un modo semplice per fissare l'opzione scelta ad ogni immagine selezionata.

Codice (Java): [Seleziona]
package com.example.gallerytry;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
       
        //the image to display
        Integer[] imageIDs = {
                R.drawable.i1,
                R.drawable.i2,
                R.drawable.i3,
                R.drawable.i4
        };
       
        String[] nome = {
                        "imm1",
                        "imm2",
                        "imm3",
                        "imm4"
        };
       
        String[] abbondanza;
       
        public LinearLayout myRelative;
        public TextView textView;
        public Button button;
        public LinearLayout.LayoutParams lp;
        public Spinner spn;
       
        int immagine;
       
        ArrayAdapter<String> adapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                myRelative= (LinearLayout) findViewById(R.id.my_relative);
                abbondanza = getResources().getStringArray(R.array.abbondanza);
               
                adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,abbondanza);
               
                Gallery gallery = (Gallery) findViewById(R.id.gallery1);
               
                gallery.setAdapter(new ImageAdapter(this));
                gallery.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView parent, View v, int position,
                                        long id) {
                                Toast.makeText(getBaseContext(), "pic" + (position + 1) + "selected",
                                                Toast.LENGTH_SHORT).show();
                               
                                //display the item selected
                                ImageView imageView = (ImageView) findViewById(R.id.image1);
                                imageView.setImageResource(imageIDs[position]);
                               
                                immagine = position;
                                addItems(v);
                        }
                });
               
                spn = new Spinner(myRelative.getContext());
        spn.setAdapter(adapter);
       
        spn.setId(immagine);
        spn.setOnItemSelectedListener(new OnItemSelectedListener() {
                       
                       

                        @Override
                        public void onItemSelected(AdapterView<?> arg0, View arg1,
                                        int arg2, long arg3) {
                                int index = arg0.getSelectedItemPosition();
                               
                        }

                        @Override
                        public void onNothingSelected(AdapterView<?> arg0) {
                               
                               
                        }
                });
               
        }
       
        public class ImageAdapter extends BaseAdapter
        {
                Context context;
                int itemBackground;
               
                public ImageAdapter(Context c)
                {
                        context = c;
                        TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
                        itemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
                        a.recycle();
                }

                @Override
                public int getCount() {
                        // TODO Auto-generated method stub
                        return imageIDs.length;
                }

                @Override
                public Object getItem(int position) {
                        // TODO Auto-generated method stub
                        return position;
                }

                @Override
                public long getItemId(int position) {
                        // TODO Auto-generated method stub
                        return position;
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                        ImageView imageView;
                        if(convertView==null)
                        {
                                imageView = new ImageView(context);
                                imageView.setImageResource(imageIDs[position]);
                                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                                imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));
                        }
                        else
                                imageView = (ImageView) convertView;
                        imageView.setBackgroundResource(itemBackground);
                        return imageView;
                }
        }
       
        public void addItems(View view)
        {

        //param for views
                if(myRelative.getChildCount()!=0)
                myRelative.removeAllViews();
               
        LayoutParams params = new LinearLayout.LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
       
        //create a text view
        TextView tv = new TextView(myRelative.getContext());
        tv.setText(nome[immagine]);
        tv.setLayoutParams(params);
        int id = immagine;
        //tv.setId(id);
       
        //create spinner
        spn.setLayoutParams(params);
       
       
       
        //create a button
        Button btn = new Button(myRelative.getContext());
        btn.setText("This is a button");
        btn.setLayoutParams(params);
       
        //adds the textview
        //layout.addView(tv);
        myRelative.addView(tv);
       
       
        //adds the button
       // layout.addView(btn);
        myRelative.addView(btn);
       
        //add a spinner
        myRelative.addView(spn);
       
        lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
       
       
       
       // myRelative.addView(myRelative, lp);
        }

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

}

Post unito: 29 Maggio 2013, 15:09:55 CEST
Risolto (per ora), ho creato un array di spinner e di volta in volta visualizzo quello che mi interessa salvando all'interno l'informazione.
« Ultima modifica: 29 Maggio 2013, 15:09:55 CEST da jonsnow81, Reason: Merged DoublePost »