Autore Topic: Richiamare una funzione e passare un parametro  (Letto 649 volte)

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Richiamare una funzione e passare un parametro
« il: 27 Aprile 2015, 14:36:16 CEST »
0
Ciao a tutti,
premetto che sto scrivendo un'applicazione di streaming al solo scopo di imparare a programmare con Android Studio, quindi livello "assolutamente principiante"!

L'app che ho creato consiste in 5 bottoni che alla loro pressione avviano 5 diverse funzioni, ho associato tali funzioni attraverso l'editor grafico di Android Studio, cioè fra le caratteristiche del bottone ho scritto in "onClick" il nome della relativa funzione (esempio canzone1, canzone2, canzone3, canzone4 e canzone5).
Le 5 funzioni sono identiche, cambia solo il nome del file mp3 che faccio partire.

La soluzione funziona ma da programmatore mi fa un po ribrezzo avere 5 funzioni che fanno la stessa identica cosa, quindi volevo ridurre tutto a una.

Se chiamo la nuova funzione così:
Codice: [Seleziona]
public void avviaCanzone(View v)
è possibile passare un parametro (esempio canzone2 o canzone5) scrivendolo direttamente dall'interfaccia di design dell'app? Ad esempio avviaCanzone('canzone2').

Grazie e scusate se la domanda è ovvia, sono veramente agli inizi!

Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS7
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Richiamare una funzione e passare un parametro
« Risposta #1 il: 27 Aprile 2015, 16:26:38 CEST »
0
Io solitamente in questi casi parametrizzo le View da codice con setTag.

poi uso getTag per customizzare l'azione.

ma se vuoi puoi anche fare un switch sull'Id della View

Ciao

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Richiamare una funzione e passare un parametro
« Risposta #2 il: 27 Aprile 2015, 16:54:28 CEST »
0
Grazie della dritta, ora mi informo sulle istruzioni setTag e getTag e casomai mi faccio risentire, sono veramente inesperto ma cercando e provando si impara!

EDIT: Ho fatto così e funziona, lo scrivo per i principianti come me!

Codice: [Seleziona]
android:onClick="ButtonOnClick" (nel file xml del layout)

Codice: [Seleziona]
public void ButtonOnClick(View v) {
    switch (v.getId()) {
      case R.id.button1:
        faiQualcosa1();
        break;
      case R.id.button2:
        faiQualcosa2();
        break;
      }
}

Molto pratico e diretto!
« Ultima modifica: 27 Aprile 2015, 21:26:53 CEST da smurf »

iClaude

  • Visitatore
Re:Richiamare una funzione e passare un parametro
« Risposta #3 il: 29 Aprile 2015, 17:48:15 CEST »
0
Una soluzione ancora migliore è creare uno SparseIntArray (SparseIntArray | Android Developers) dove mappi gli id dei bottoni con gli id delle stringhe dei nomi delle canzoni.
Quindi il tuo metodo ButtonOnClick(View view) diventa molto più pulito:

suonaCanzone(mioSparseIntArray.get(view.getId())

Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS7
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Richiamare una funzione e passare un parametro
« Risposta #4 il: 29 Aprile 2015, 19:04:47 CEST »
0
Vabbé, anche:

Codice (Java): [Seleziona]
    suonaCanzone( (String)view.getTag() );
mi sembrava abbastanza pulito, senza dover sguinzagliare una ricerca...

Ciao.

iClaude

  • Visitatore
Re:Richiamare una funzione e passare un parametro
« Risposta #5 il: 29 Aprile 2015, 19:43:46 CEST »
0
Vabbé, anche:

Codice (Java): [Seleziona]
    suonaCanzone( (String)view.getTag() );
mi sembrava abbastanza pulito, senza dover sguinzagliare una ricerca...

Ciao.

Certo, puoi fare anche così.
A me sembra più comodo avere uno SparseArray per mappare i valori perchè, specialmente se devi impostare le canzoni dinamicamente, è molto più comodo e il codice diventa più pulito, anziché dover ricavare i reference ai vari bottoni e richiamare setTag su ognuno.
Ciao.

Offline smurf

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 7 64bit
Re:Richiamare una funzione e passare un parametro
« Risposta #6 il: 29 Aprile 2015, 19:50:48 CEST »
0
Vi ringrazio! A dir la verità i bottoni saranno fissi e punteranno allo stesso nome file, tuttavia prendo il vostro esempio per imparare un codice più pulito.