Autore Topic: Numero bottoni variabile in una activity  (Letto 706 volte)

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Numero bottoni variabile in una activity
« il: 24 Marzo 2011, 17:57:29 CET »
0
Salve a tutti, ho un problema che nn saprei come risolvere: in pratica devo creare una schermata che avra' solamente dei bottoni. La pressione di uno di questi fa' partire una nuova activity, che e' la stessa per tutti i bottoni, tranne per il fatto che ad ogni bottone e' associata una particolare stringa che verra' passata alla nuova activity.
Il problema nasce dal fatto che il numero di questi bottoni non si sa' a priori, perche' prelevo da un server. Quando vado a creare i bottoni dunque faccio un for che va' da 0 al numero ricevuto e creo un bottone per ogni iterazione. Come faccio ad associare ad ogni bottone un onClickListener() per fargli fare quello che voglio? Ho provato una cosa del genere

il valore numRcvd e' il numero dei bottoni da creare che ho avuto dal server, parametro, dati e la funzione getParametroVoluto sono un'astrazione dei dati che uso, giusto per rendere l'idea...

Codice (Java): [Seleziona]
...
 Button button[] = new Button[numRcvd];
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setGravity(Gravity.TOP);
       
        for(int i = 0; i < numRcvd; i++)
        {
                 button[i] = new Button(this);
                 button[i].setText(dati.getParametroVoluto()[i]);
                 layout.addView(button[i]);
                 parametro = new String(dati.getParametroVoluto()[i]);
               
                 button[i].setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                        // TODO Auto-generated method stub
                                        Context context = getApplicationContext();

                                        Intent intent = new Intent(context, NuovaActivity.class);
                                        intent.putExtra("datiRcvd", dati);
                                        intent.putExtra("parametro", parametro);
                                        startActivity(intent);
                                }
                        });
        }
        setContentView(layout);  
...

Con questa soluzione effettivamente crea i bottoni voluti e li visualizza, ma la stringa che passo alla nuova activity e' sempre quella dell'ultima iterazione del for (GIUSTAMENTE!!!)

Avete in mente una qualche soluzione?
Risparmia l'acqua, bevi birra...

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Numero bottoni variabile in una activity
« Risposta #1 il: 25 Marzo 2011, 11:23:26 CET »
0
Ho risolto da solo il problema, posto perche' potrebbe interessare a qualcuno. Quello che sbagliavo era voler creare un onClickListener() per ogni bottone, quando in realta' me ne servirebbe uno solo. Creo un array di oggetti parametro, setto un id per il bottone che poi estraggo dentro la view dell'onClick.
Ora posto il codice modificato e corretto:

Codice (Java): [Seleziona]
...
 Button button[] = new Button[numRcvd];
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setGravity(Gravity.TOP);
        parametro = new Parametro[numRcvd];

        for(int i = 0; i < numRcvd; i++)
        {
                 button[i] = new Button(this);
                 button[i].setText(dati.getParametroVoluto()[i]);
                 layout.addView(button[i]);
                 parametro[i] = new String(dati.getParametroVoluto()[i]);
                 button[i].setId(i);

                 button[i].setOnClickListener(onButton);

        }
        setContentView(layout);

        private View.OnClickListener onButton = new OnClickListener(){
                public void onClick(View v) {
                        int  num = v.getId();
                        Context context = getApplicationContext();

                        Intent intent = new Intent(context, NuovaActivity.class);                                      
                        intent.putExtra("datiRcvd", dati);
                        intent.putExtra("parametro", parametro[num]);
                        startActivity(intent); 
                };
        };
...

Questo dovrebbe funzionare... Ciao a tutti
Risparmia l'acqua, bevi birra...