2013-08-13 13 views
6

Perché non è possibile avere entrambe le importazioni per OnClickListener. Ho già import android.view.View.OnClickListener; ma quando voglio aggiungere import android.content.DialogInterface.OnClickListener; mi dà un errore:DialogInterface vs View OnClickListeners

L'android.content.DialogInterface.OnClickListener importazione si scontra con un'altra istruzione import

Questo è il motivo per cui, ad esempio, devo scrivere il pieno spazio dei nomi del OnClickListener quando ho bisogno di attuare un DialogInterfaceOnClickListener (cioè

.setPositiveButton(R.string.ok, new android.content.DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }) 

qualcuno mi può spiegare questo? mi scuso se questa è una domanda stupida .

risposta

10

Non è possibile importare due classi con lo stesso nome nello stesso file. Se importi due classi con il nome X e chiedi un X, il compilatore non sa a quale classe ti riferisci. C'è un bel compromesso in queste situazioni. È possibile sostituire questa importazione ...

import android.content.DialogInterface.OnClickListener; 

Con questa importazione ...

import android.content.DialogInterface; 

Poi, quando è necessario fare riferimento a quel particolare interfaccia, è possibile fare qualcosa di simile ...

.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { ... }) 

Questo funziona perché DialogInterface è un'interfaccia con un'interfaccia statica nidificata denominata OnClickListener. Questo dovrebbe essere un po 'più bello per gli occhi, e risolve il problema di collisione di nome.

+0

Grazie per la spiegazione. Saluti – Aksiom

0

presumo a pensare che è perché alcune classi (come AlertDialog) funzionano con il DialogInterface.OnClickListener in cui il metodo OnClick accetta due parametri:

Parameters:
dialog - The dialog that received the click.
paramAnonymousInt - The button that was clicked (e.g. DialogInterface.BUTTON1) or the position of the item clicked.

considerando che il metodo OnClick da View.OnClickListener interfaccia richiede solo uno:

Parameters:
v - The view that was clicked.