2013-08-13 16 views
6

Dlaczego nie mogę mieć obu importów dla OnClickListener. Mam już import android.view.View.OnClickListener; ale gdy chcę dodać import android.content.DialogInterface.OnClickListener; wyskakuje mi błąd:DialogInterface kontra View OnClickListeners

Import android.content.DialogInterface.OnClickListener zderza się z innym instrukcji import

To jest powód, dlaczego, na przykład, muszę napisać pełną przestrzeń nazw OnClickListener kiedy trzeba zaimplementować DialogInterfaceOnClickListener (tj

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

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

       } 
      }) 

może ktoś mi to wyjaśnić? przepraszam jeśli to głupie pytanie .

Odpowiedz

10

Nie można zaimportować dwóch klas o tej samej nazwie w tym samym pliku. Jeśli zaimportujesz dwie klasy o nazwie X i poprosisz o numer X, kompilator nie będzie wiedział, do której klasy się odwołujesz. W takich sytuacjach istnieje dobry kompromis. Można zastąpić ten import ...

import android.content.DialogInterface.OnClickListener; 

Z tego importu ...

import android.content.DialogInterface; 

Wtedy, kiedy trzeba odwołać się do danego interfejsu, można zrobić coś takiego ...

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

Działa to, ponieważ DialogInterface jest interfejsem z zagnieżdżonym interfejsem statycznym o nazwie OnClickListener. To powinno być trochę ładniejsze dla oczu i rozwiązuje problem kolizji nazw.

+0

Dziękuję za wyjaśnienie. Twoje zdrowie – Aksiom

0

Zakładam, aby myśleć, że to dlatego, że niektóre klasy (jak AlertDialog) pracować z DialogInterface.OnClickListener gdzie metoda OnClick przyjmuje dwa parametry:

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.

Podczas gdy metoda z View.OnClickListener interfejsu OnClick zajmuje tylko jeden:

Parameters:
v - The view that was clicked.