CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 14 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 35 Thanks ricevuti nell'ultimo mese

Pagina 1 di 2 12 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 1 a 10 su 13
Discussione:

[Java/Android] Chiarimento su Classi innestate anonime di Java per fare event listene

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    84

    Ringraziamenti
    2
    Ringraziato 1 volta in 1 Post
    Predefinito

    [Java/Android] Chiarimento su Classi innestate anonime di Java per fare event listene

    Ciao,
    per un progetto universitario stò studiando Android che di fatto è Java e vorrei un chiarimento sull'uso delle classi innestate anonime di Java e del loro utilizzo.

    Stavo studiando questo esempio che semplicemente gestisce 2 bottoni assegnandogli un listener con tale tecnica, ecco quì il codice (molto commentato):

    codice:
    package mieapplicazioni.test;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class TestActivity extends Activity {
    	
    	// Richiamato non appena l'attività viene creata
    	@Override
    	public void onCreate(Bundle savedInstanceState){
    		super.onCreate(savedInstanceState);					// Invoca il costruttore del supertipo
    		
    		// Parte personale del metodo:
    		setContentView(R.layout.main);		// Setta il layout prendendolo in /res/layout/main.xml
    		
    		/* Richiama i bottoni: il metodo findViewById() ricerca nel layout caricato un componente
    		 * avente l'ID specificato come argomento. A questo punto il bottone può essere caricato
    		 * e manipolato */
    		Button bottone01 = (Button) findViewById(R.id.bottone01);	
    		Button bottone02 = (Button) findViewById(R.id.bottone02);
    		
    		bottone01.setOnClickListener(new OnClickListener(){	// Aggiungo un gestore d'eventto al bottone
    			@Override
    			public void onClick(View v) {
    				clickSuBottone01();
    			}
    		});
    	
    		bottone02.setOnClickListener(new OnClickListener(){ // Aggiungo un gestore d'eventto al bottone
    			@Override
    			public void onClick(View v) {
    				clickSuBottone02();
    			}
    		});
    		
    	}
    	
    	// Gestisce l'evento del click sul bottone 1 stampando un messaggio
    	private void clickSuBottone01(){
    		Toast toast = Toast.makeText(this, "Hai cliccato il bottone 1!", Toast.LENGTH_SHORT);
    		toast.show();
    	}
    	
    	// Gestisce l'evento del click sul bottone 2 stampando un messaggio
    	private void clickSuBottone02(){
    		Toast toast = Toast.makeText(this, "Hai cliccato il bottone 2!", Toast.LENGTH_SHORT);
    		toast.show();
    	}
    	
    }
    Praticamente sulla guida che stò leggendo dice che questa tecnica di gestione fà risparmiare linee di codice e tempo rispetto a quella che consiste di far implementare alla classe attività le interfacce dei listener e che praticamente in questo caso si crea e si registra allo stesso tempo il gestore dell'evento di click e che poi ci pensa il compilatore a separare la classe anonima innestata su di un apposito file .class

    Slo che non capisco esattamente cosa stà facendo...di fatto dov'è che stò usando queste benedette classi anonime innestate nel mio codice?

    Grazie
    Andrea

  2.  
  3. #2
    Baby Droid


    Registrato dal
    Aug 2010
    Località
    Palermo
    Messaggi
    48

    Ringraziamenti
    0
    Ringraziato 7 volte in 7 Posts
    Predefinito

    Mah, si risparmi codice ma, a mio parere, brutto da vedere ed a livello ingegneristico ne avrei da ridire molto...
    Il modo migliore, sempre a mio parere, è fare classi a parte per i vari listener (da qui classi anonime?).

  4. #3
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    84

    Ringraziamenti
    2
    Ringraziato 1 volta in 1 Post
    Predefinito

    eh infatti sulle dispense del mio professore prima fà come dici te, crea una classe per ogni listener facendogli implementare la relativa interfaccia e poi le usa nelle attività mi pare...

    Poi però fà vedere quest'altro modo per risparmiare codice e dice che è quello maggiormente usato e consigliato...fatto stà che non l'ho capito a fondo (se mi puoi dare qualche info magari te ne sarei grato...) a me francamente fà un po' cagare perchè mi pare molto poco leggibile...

  5. #4
    Baby Droid


    Registrato dal
    Aug 2010
    Località
    Palermo
    Messaggi
    48

    Ringraziamenti
    0
    Ringraziato 7 volte in 7 Posts
    Predefinito

    esattamente, è poco leggibile...principalmente quando si parla di programmazione ad oggetti non si risparmia mai codice su questo. Solo che la lagnusia mangia sempre le mani a tutti.
    Listener su classi separate permettono una migliore revisione del codice, oddìo ti dovresti muovere su più file, ma vabbè...sempre più leggibile...
    Come incapsulamento...uhm...qui bisogna vedere che ti risponderebbe il prof sulla validità delle due opzioni, io preferirei sempre la mia.

  6. #5
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    84

    Ringraziamenti
    2
    Ringraziato 1 volta in 1 Post
    Predefinito

    Quote Originariamente inviato da sprik Visualizza il messaggio
    esattamente, è poco leggibile...principalmente quando si parla di programmazione ad oggetti non si risparmia mai codice su questo. Solo che la lagnusia mangia sempre le mani a tutti.
    Listener su classi separate permettono una migliore revisione del codice, oddìo ti dovresti muovere su più file, ma vabbè...sempre più leggibile...
    Come incapsulamento...uhm...qui bisogna vedere che ti risponderebbe il prof sulla validità delle due opzioni, io preferirei sempre la mia.
    Ok...ma mi puoi spiegare brevemente cosa sono queste classi innestate anonime e dove starebbe la classe innestata nel mio codice che non ce l'ho troppo chiara questa cosa?

    Grazie
    Andrea

  7. #6
    Baby Droid


    Registrato dal
    Aug 2010
    Località
    Palermo
    Messaggi
    48

    Ringraziamenti
    0
    Ringraziato 7 volte in 7 Posts
    Predefinito

    le classi innestate anonime sono classi definite all'interno di un metodo o di un corpo di una classe stessa. sono anonime appunto perchè non hanno un nome:

    Qui il gestore che aggiungi (il listener) è una classe anonima in quanto non specifichi l'identificatore della classe ma ne fai una breve descrizione.
    Questo tipo di classi sono utilizzate spesso per questo genere di cose ma con gestore piccoli, se devi fare molte operazioni è consigliabile fare la classe a parte in modo da dividere il codice e semplificare la lettura dello stesso.

  8. Il seguente Utente ha ringraziato sprik per il post:

    AndreaNobili (06-09-10)

  9. #7
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    84

    Ringraziamenti
    2
    Ringraziato 1 volta in 1 Post
    Predefinito

    Ti ringrazio,
    ora è tutto molto chiaro...beh credo che opterò per il metodo classico della classe separata che implementa l'apposita interfaccia del gestore...ora che ho capito di cosa si trattano confermo la mia antipatia verso tale metodo...

    Grazie
    Andrea

  10. #8
    Baby Droid


    Registrato dal
    Aug 2010
    Località
    Palermo
    Messaggi
    48

    Ringraziamenti
    0
    Ringraziato 7 volte in 7 Posts
    Predefinito

    ahahah, eh si...se ci metti un bel po' di codice diventa veramente inguardabile, anche se metti poi metodi appositi è sempre brutto a livello professionale...meglio la classe a parte.

  11. #9
    Baby Droid


    Registrato dal
    Jul 2009
    Messaggi
    4

    Ringraziamenti
    0
    Ringraziato 1 volta in 1 Post
    Predefinito

    Scusate la "niubbezza" della domanda, ma non possiamo implementare onClickListener nella classe TestActivity e gestire l'evento onClick direttamente da quella?

    qualcosa tipo:
    codice:
    package mieapplicazioni.test;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class TestActivity extends Activity implements onClickListener{
    	
    	// Richiamato non appena l'attività viene creata
    	@Override
    	public void onCreate(Bundle savedInstanceState){
    		super.onCreate(savedInstanceState);					// Invoca il costruttore del supertipo
    		
    		// Parte personale del metodo:
    		setContentView(R.layout.main);		// Setta il layout prendendolo in /res/layout/main.xml
    		
    		/* Richiama i bottoni: il metodo findViewById() ricerca nel layout caricato un componente
    		 * avente l'ID specificato come argomento. A questo punto il bottone può essere caricato
    		 * e manipolato */
    		Button bottone01 = (Button) findViewById(R.id.bottone01);	
    		Button bottone02 = (Button) findViewById(R.id.bottone02);
    		
    		bottone01.setOnClickListener(this);
    	
    		bottone02.setOnClickListener(this);
    		
    	}
    
    	// Gestisce il click su entrambi i bottoni
            public void onClick(View v) {
                // Qua ci va una decisione su chi ha generato l'evento, in Java usavo if(e.getSource() instanceof BOTTONE) && (e.getSource().getName().equals(NOMEBOTTONE))
                // clickSuBottone01(); o clickSuBottone02();
            }
    
    	// Gestisce l'evento del click sul bottone 1 stampando un messaggio
    	private void clickSuBottone01(){
    		Toast toast = Toast.makeText(this, "Hai cliccato il bottone 1!", Toast.LENGTH_SHORT);
    		toast.show();
    	}
    	
    	// Gestisce l'evento del click sul bottone 2 stampando un messaggio
    	private void clickSuBottone02(){
    		Toast toast = Toast.makeText(this, "Hai cliccato il bottone 2!", Toast.LENGTH_SHORT);
    		toast.show();
    	}
    	
    }
    Ultima modifica di Demolitions; 10-09-10 alle 14:35

  12. #10
    Baby Droid


    Registrato dal
    Aug 2010
    Località
    Palermo
    Messaggi
    48

    Ringraziamenti
    0
    Ringraziato 7 volte in 7 Posts
    Predefinito

    per quanto mi ricordi, si

Pagina 1 di 2 12 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy