2013-08-13 1 views
6

Pourquoi ne puis-je avoir les deux importations pour OnClickListener. Je l'ai déjà import android.view.View.OnClickListener; mais quand je veux ajouter import android.content.DialogInterface.OnClickListener; il me donne une erreur:DialogInterface vs Afficher OnClickListeners

Le android.content.DialogInterface.OnClickListener d'importation entre en collision avec une autre déclaration d'importation

Ceci est la raison pour laquelle, par exemple, Je dois écrire l'espace de nom complet du OnClickListener quand je dois mettre en œuvre un DialogInterfaceOnClickListener (c.-à-

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

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

       } 
      }) 

quelqu'un peut-il me l'expliquer? Excusez-moi si cela est une question stupide .

Répondre

10

Vous ne pouvez pas importer deux classes portant le même nom dans le même fichier. Si vous importez deux classes avec le nom X et que vous demandez un X, le compilateur ne sait pas à quelle classe vous faites référence. Il y a un bon compromis dans ces situations. Vous pouvez remplacer cette importation ...

import android.content.DialogInterface.OnClickListener; 

Avec cette importation ...

import android.content.DialogInterface; 

Ensuite, lorsque vous avez besoin de se référer à cette interface particulière, vous pouvez faire quelque chose comme ça ...

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

Cela fonctionne car DialogInterface est une interface avec une interface statique imbriquée nommée OnClickListener. Cela devrait être un peu plus agréable pour les yeux, et cela résout le problème de collision de noms.

+0

Merci pour l'explication. À votre santé – Aksiom

0

je suppose de penser que est parce que certaines classes (comme AlertDialog) travaillent avec le DialogInterface.OnClickListener où la méthode OnClick prend deux paramètres:

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.

Alors que la méthode OnClick de View.OnClickListener l'interface prend une seule:

Parameters:
v - The view that was clicked.

Questions connexes