DialogInterface vs View OnClickListeners

时间:2013-08-13 15:38:25

标签: java android onclicklistener collision

为什么我不能同时拥有OnClickListener的导入。我已经import android.view.View.OnClickListener;但是当我想添加import android.content.DialogInterface.OnClickListener;时,它会给我一个错误:

导入android.content.DialogInterface.OnClickListener与另一个导入语句冲突

这就是为什么,当我需要实现OnClickListener DialogInterface时,我必须编写OnClickListener的完整命名空间(即

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

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

                }
            })

任何人都能解释一下这个吗?如果这是一个愚蠢的问题,我道歉。

2 个答案:

答案 0 :(得分:10)

您无法在同一文件中导入两个具有相同名称的类。如果导入两个名为X的类并且要求X,则编译器不知道您指的是哪个类。在这些情况下有一个很好的妥协。您可以替换此导入...

import android.content.DialogInterface.OnClickListener;

有了这个导入......

import android.content.DialogInterface;

然后当你需要引用那个特定的界面时,你可以做这样的事情......

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

这是有效的,因为DialogInterface是一个带有名为OnClickListener的嵌套静态接口的接口。这应该对眼睛更好一点,它解决了名称碰撞问题。

答案 1 :(得分:0)

我认为这是因为某些类(如AlertDialog)与DialogInterface.OnClickListener一起工作,其中OnClick方法有两个参数:

  

参数的:       
对话框 - 收到点击的对话框。       
paramAnonymousInt - 单击的按钮(例如DialogInterface.BUTTON1)或单击项目的位置。

OnClick界面中的View.OnClickListener方法只有一个:

  

参数的:       
v - 点击的视图。