Visualizzazione stampabile
-
Problema con Java
Ciao a tutti, premetto che ho qualche conoscenza di java ma non troppo avanzata e sto studiando da un paio di giorni la programmazione per android da l libro di Massimo Carli.
Forse più avanti il libro spiegherà meglio questa parte, intanto preferirei capire la sintassi visto che non l'ho mai usata in java:
codice:
pressButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
outputView.setText("Click # " + counter++);
}
});
Scusate l'ignoranza, ma non saprei come approfondire il concetto perchè non so come viene chiamato questo "paradigma"
Ciao a tutti e grazie per l'attenzione
-
in poche parole non fai altro con questo codice che settare un listener sul tuo button che si preoccupa di gestire la pressione del tuo button attraverso il metodo onClick(View v), nel tuo caso specifico alla pressione del button non fai altro che settare il testo di una textView.
fammi sapere se hai bisogno di altre delucidazioni
-
Ciao e grazie per la tua disponibilità :)
In realtà non mi sono spiegato molto bene... il compito del programma, cioè quello di settare un listener sul pulsante ed eseguire l'azione, l'ho capito.
Quello che non ho capito è il compito della new all'interno delle parentesi tonde...
cioè, vorrei capire meglio cosa succede a livello di riferimenti, parametri ecc..
Nella mia scarsa esperienza con Java, non mi era mai capitato di vedere una cosa del tipo:
metodo1( new metodo2{ ... } );
E ho preferito pormi qualche domanda su java prima di continuare a leggere dando per scontata questa sintassi.
-
in poche parole il new serve ad istanziare un nuovo listener sarebbe lo stesso se istanziassi prima il listener ad esempio così
codice:
OnClickListener clickListener=new OnClickListener(){ public void onClick(View v){ ...} }
e poi lo passi come parametro al metodo setOnClickListener(clickListener) così
oppure potresti far si che la tua classe implementi OnClickListener e passare this come riferimento al metodo setOnClickListener(this) in questa maniera
non so se sono stato esauriente ma non credo ci sia di più da dire fammi sapere
-
Sei stato chiarissimo!
Ti faccio un'altra domanda così mi tolgo ogni dubbio (spero)...
Io ho sempre usato la new in questo modo:
codice:
new Oggetto( eventuali parametri per il costruttore);
Perchè invece, in questo caso, dopo le parentesi tonde si usano le graffe come se si volesse definire il metodo?
codice:
new Oggetto( eventuali parametri per il costruttore){
istruzioni
}
;
-
proprio perchè inizialmente vai ad instanziare l'interfaccia del listener con new onClickListener e dopo le parentesi graffe tu vai ad implementare il metodo onClick();
-
Quote:
Originariamente inviato da
blaster
proprio perchè inizialmente vai ad instanziare l'interfaccia del listener con new onClickListener e dopo le parentesi graffe tu vai ad implementare il metodo onClick();
Ora ho un pò di confusione o_O
Che io sappia, un'interfaccia ha proprio la caratteristica che non può essere instanziata...
A parte questo, vediamo se ho capito:
fare
codice:
new Interfaccia(){
void metodo1(){
...
}}
significa instanziare un'oggetto di Interfaccia che avrà un unico metodo implementato (cioè metodo1) e tutti gli altri astratti?
-
Quote:
Originariamente inviato da
Supergiox
Ora ho un pò di confusione o_O
Che io sappia, un'interfaccia ha proprio la caratteristica che non può essere instanziata...
A parte questo, vediamo se ho capito:
fare
codice:
new Interfaccia(){
void metodo1(){
...
}}
significa instanziare un'oggetto di Interfaccia che avrà un unico metodo implementato (cioè metodo1) e tutti gli altri astratti?
Più precisamente con quella sintassi dichiari una classe anonima che implementa quella interfaccia ;)
-
Perfetto!
Mi hai fatto capire qual era la mia lacuna... le CLASSI ANONIME! :)
Mai viste prima... ho letto qualcosa e ho capito!
Grazie!
-
Invece (non so se è il caso di aprire un altro post),
vorrei capire perchè si utilizza la parola chiave "final" per la TextView, se proprio questa verrà modificata (fatto sta che il programma funziona!), e invece il button non è final...
codice:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class ProjectLayoutActivity extends Activity {
// COntatore
private int counter = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Otteniamo il riferimento al Button
Button pressButton = (Button) findViewById(R.id.pressButton);
// Otteniamo il riferimento alla TextView
final TextView outputView = (TextView) findViewById(R.id.output);
// Ascoltiamo l'evento di pressione associato al pulsante
pressButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
outputView.setText("Click # " + counter++);
}
});
}
}
E poi non so a cosa serve l'istruzione @override.
La cosa grave è che non trovo risposta alle mie domande sui libri...