2014-09-12 9 views
15

Ho difficoltà a capire questo codice. Ottengo hat findViewById otterrà il widget del pulsante e quindi lo proietterà. Quindi userà btn per chiamare il metodo setOnClickListener. Tuttavia non so quale argomento venga passato a setOnClickListener e non ho mai visto un codice simile prima. Com'è che crea un nuovo oggetto ma è in grado di creare un metodo a sé stante all'interno dell'argomento di un altro metodo? Sarebbe bello se qualcuno potesse spiegarlo. Inoltre, quale tipo di oggetto è il metodo setOnClickListener?Android - metodo setOnClickListener come funziona?

btn = (Button)findViewById(R.id.firstButton); 
btn.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     tv.setText(months[rand.nextInt(12)]); 
     tv.setTextColor(Color.rgb(rand.nextInt(255)+1, rand.nextInt(255)+1, rand.nextInt(255)+1)); 
    } 
}); 
+0

mettere all'interno della Toat e controllare –

+0

E 'che fornisce un esempio di una classe anonima che è conforme alla l'interfaccia View.OnClickListener. –

+0

Spero che questa lezione ti possa aiutare https://www.youtube.com/watch?v = Xl1x8eazbrM & ebc = ANyPxKr7uanNpJyW2UNvdSJGe6icStfh8ACnAf-yZZDe1EbQvjhb60XEnHPj9WU_Kd7c2lbfLfRiYW09jVdQtXnRH6IwhcafSA –

risposta

10

Funziona così. View.OnClickListenere viene definito -

public interface OnClickListener { 
    void onClick(View v); 
} 

Per quanto ne sappiamo, non è possibile creare un'istanza di un oggetto OnClickListener, in quanto non dispone di un metodo implementato. Quindi ci sono due modi si può andare da - è possibile implementare questa interfaccia che sovrascriverà onClick metodo come questo:

public class MyListener implements View.OnClickListener { 
    @Override 
    public void onClick (View v) { 
     // your code here; 
    } 
} 

Ma è noioso per farlo ogni volta come si desidera impostare un clic ascoltatore. Quindi, per evitare questo, puoi fornire l'implementazione del metodo in loco, proprio come nell'esempio che hai fornito.

setOnClickListener prende come parametro il View.OnClickListener.

+1

Fantastica spiegazione !! Ha perfettamente senso ora e ha imparato qualcosa di nuovo !! Non ho mai saputo che tu possa istanziare un oggetto di un'interfaccia implementando il suo metodo sul posto. Molto bello – rayleigh

+0

Qual è l'argomento del metodo "setOnClickListener"? – user72829

+0

Se vuoi saperne di più leggi su Observer Design Pattern :) – YTerle

0

Che quello manuale says circa setOnClickListener metodo è:

public void setOnClickListener (View.OnClickListener l) 

Aggiunto a livello di API 1 registrare un callback da invocare quando questa visione viene cliccato. Se questa vista non è selezionabile, diventa cliccabile.

Parametri

l View.OnClickListener: Il callback che verrà eseguito

e normalmente si deve utilizzare in questo modo

public class ExampleActivity extends Activity implements OnClickListener { 
    protected void onCreate(Bundle savedValues) { 
     ... 
     Button button = (Button)findViewById(R.id.corky); 
     button.setOnClickListener(this); 
    } 

    // Implement the OnClickListener callback 
    public void onClick(View v) { 
     // do something when the button is clicked 
    } 
    ... 
} 

Date un'occhiata anche a questa lezione Building a Simple Calculator using Android Studio.

0

Questo è il modo migliore per implementare Onclicklistener per molti pulsanti di una riga implementare View.onclicklistener.

public class MainActivity extends AppCompatActivity **implements View.OnClickListener** { 

Si tratta di un pulsante nella mainactivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

bt_submit = (Button) findViewById(R.id.submit); 

bt_submit.setOnClickListener(this); 

Questo è un metodo ovveride

@Override 
    public void onClick(View view) { 
     switch (view.getId()){ 
      case R.id.submit: 
       //action 

       break; 

      case R.id.secondbutton: 
       //action 
       break; 
     } 
    } 
Problemi correlati