Autore Topic: setOnClickListener() e onClick() e parametro da passargli  (Letto 1153 volte)

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
setOnClickListener() e onClick() e parametro da passargli
« il: 13 Agosto 2014, 16:06:56 CEST »
0
Ciao,
sto iniziando con android, mi sono letto un pò di guide ufficiali e non e ora inizio a togliermi qualche dubbietto dal punto di vista della programmazione android.

Ho un dubbio relativo a setOnClickListener() e il parametro da passargli e stessa cosa su onClick()

Questo è il codice preso da html.it :

Codice (Java): [Seleziona]
public class HelloLinear extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Button button = (Button) findViewById(R.id.form_button);
        [b]button.setOnClickListener(this);[/b]
    }
    @Override
    [b]public void onClick(View v)[/b] {
        // TODO Auto-generated method stub
        switch ( v.getId() ) {
            case R.id.form_button:
            final EditText edit_name = (EditText)findViewById(R.id.edit_name);
            final EditText edit_lastname = (EditText)findViewById(R.id.edit_lastname);
            Bundle bundle = new Bundle();
            bundle.putString("name", edit_name.getText().toString());
            bundle.putString("lastname", edit_lastname.getText().toString());
            Intent form_intent = new Intent(getApplicationContext(), Form.class);
            form_intent.putExtras(bundle);
            startActivity(form_intent);
            break;
        }
    }
}

questa la definizione presa dal reference :

Codice (Java): [Seleziona]
public void setOnClickListener (View.OnClickListener l)

Added in API level 1
Register a callback to be invoked when this view is clicked. If this view is not clickable, it becomes clickable.

Parameters
l       The callback that will run
See Also
setClickable(boolean)

perchè nell'esempio di html.it gli passo this a setOnClickListener ? non gli dovrei passare la mia implementazione dell'OnClickListener ?  :-\



Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:setOnClickListener() e onClick() e parametro da passargli
« Risposta #1 il: 13 Agosto 2014, 20:22:04 CEST »
0
No essendo già la classe HelloLinear implementazione di OnClickListener.
Se togli l'implementazione della classe poi fare così:
Codice (Java): [Seleziona]
// onCreate
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Metti qua quello che vuoi che succeda
            }
        });
oppure così:
Codice (Java): [Seleziona]
// onCreate
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(onClickListener);
// fuori dall'onCreate
View.OnClickListener onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Metti qua quello che vuoi che succeda
            }
        };
Tutto chiaro?

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:setOnClickListener() e onClick() e parametro da passargli
« Risposta #2 il: 13 Agosto 2014, 21:19:00 CEST »
0
Ciao :) Grazie per la risposta ! :)

I tuoi esempi sono l'equivalente di questo modo di procedere che ho trovato nel reference , giusto ? :)

Codice (Java): [Seleziona]
private OnClickListener mCorkyListener = new OnClickListener() {
    public void onClick(View v) {
      // do something when the button is clicked
    }
};

protected void onCreate(Bundle savedValues) {
    ...
    // Capture our button from layout
    Button button = (Button)findViewById(R.id.corky);
    // Register the onClick listener with the implementation above
    button.setOnClickListener(mCorkyListener);
    ...
}

Però vedo che differisce in questa cosa :

Codice (Java): [Seleziona]
View.OnClickListener onClickListener = new View.OnClickListener() {
         ...
};

(Sono alle prime armi nel mondo Android e ci sono una miriade di classi,interfaccie ecc ecc che mi saltano all'occhio e faccio confusione come riferirmi alle varie classi -.-")
Come mai te usi
Codice (Java): [Seleziona]
View.OnClickListener mentre google usa
Codice (Java): [Seleziona]
OnClickListener ? Eppure la classe è chiamata View.OnClickListener o.O

Tra il tuo modo di procedere, il modo di procedere del primo esempio che avevo tratto da html.it e dal richiamo direttamente dall'androidmanifest.xml senza usare i Listener
Esempio:
Codice (XML): [Seleziona]
android:onClick="funzione"
In base a cosa devo scegliere un modo di procedere o un altro ?


O.T : in java (usato a livello base) non ero abituato a vedere costrutti del genere
Codice (Java): [Seleziona]
 View.OnClickListener onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Metti qua quello che vuoi che succeda
            }
        };
mi fermavo ad una cosa del tipo :
View.OnClickListener onClickListener = new View.OnClickListener()

come funziona questo tipo di costrutto ?
p.s : sono off-topic con questa domanda, però dato che voi usate spesso questi costrutti magari sapete dove indirizzarmi su qualche guida,reference o quant'altro che possa spiegarmi questo modo di implementare le classi :) Non mi piace troppo usare le cose meccanicamente :/

edit : sono le classi anonime.. ora ho capito :D

« Ultima modifica: 13 Agosto 2014, 22:55:16 CEST da aeroxr1 »

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:setOnClickListener() e onClick() e parametro da passargli
« Risposta #3 il: 13 Agosto 2014, 21:32:56 CEST »
0
Credo che sia sempre per il fatto che implementi OnClickListener e quindi non devi richiamare la classe View (a me lo corregge automaticamente Android Studio).
Anche usando android:onClick="funzione" non è scorretto, però lo trovo di più difficile lettura e non lo uso mai, anche perchè se voglio modificare il nome poi dovrei andare a cercare la view nell'XML.
Dal punto di vista dell'efficienza del codice non so quale sia il migliore ma non penso ci siano differenze rilevanti se non nella comodità di lettura.
Il codice di Google aggiunge anche il private, meglio metterlo se non hai intenzione di usarlo in altre classi...io lo dimentico sempre ...

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:setOnClickListener() e onClick() e parametro da passargli
« Risposta #4 il: 13 Agosto 2014, 22:09:39 CEST »
0
http://developer.android.com/reference/android/view/View.OnClickListener.html


Il punto è che la classe sembra proprio chiamarsi "View.OnClickListener" o sbaglio ? O.o

forse dipende se faccio l'import di android.view o se faccio l'import di android.view.View.OnclickListener ? O.o

« Ultima modifica: 13 Agosto 2014, 22:54:49 CEST da aeroxr1 »

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:setOnClickListener() e onClick() e parametro da passargli
« Risposta #5 il: 14 Agosto 2014, 00:32:08 CEST »
0
Questo è quello che ci è scritto nella classe View:
Codice (Java): [Seleziona]
// Import librerie
public class View implements Drawable.Callback, KeyEvent.Callback,
        AccessibilityEventSource {
// ...
    public interface OnClickListener {
            /**
             * Called when a view has been clicked.
             *
             * @param v The view that was clicked.
             */

            void onClick(View v);
        }
// ...
}
A te le conclusioni!

PS:  A me l'import me lo fa in automatico premento Alt+Invio

Offline aeroxr1

  • Utente junior
  • **
  • Post: 76
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexus
  • Sistema operativo:
    window 8.1
Re:setOnClickListener() e onClick() e parametro da passargli
« Risposta #6 il: 14 Agosto 2014, 01:21:52 CEST »
0
Questo è quello che ci è scritto nella classe View:
Codice (Java): [Seleziona]
// Import librerie
public class View implements Drawable.Callback, KeyEvent.Callback,
        AccessibilityEventSource {
// ...
    public interface OnClickListener {
            /**
             * Called when a view has been clicked.
             *
             * @param v The view that was clicked.
             */

            void onClick(View v);
        }
// ...
}
A te le conclusioni!

PS:  A me l'import me lo fa in automatico premento Alt+Invio

che pollo che sono.. Non ci avevo mica pensato ad andare a vedere direttamente la classe view :)

Grazie mille !

EDIT : comunque il problema è sull'import . Cioè se faccio l'import di View allora devo usare View.OnclickListener. Se faccio 'limport di View.OnclickListener posso usare solo OnclickListener :D NOn ho capito bene il , perchè di ciò, ma devo ripassarmi le classi annidate :)
« Ultima modifica: 14 Agosto 2014, 11:44:32 CEST da aeroxr1 »