DialogInterface和View OnClickListeners的区别

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

The import android.content.DialogInterface.OnClickListener collides with another import statement

这就是为什么,例如,当我需要实现DialogInterfaceOnClickListener时,我必须写完整的命名空间(即...)。

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

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

                }
            })

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

2个回答

10

在同一个文件中不能导入两个具有相同名称的类。如果你导入了两个名为X的类,并且你请求一个X,编译器不知道你所指的是哪个类。在这种情况下,有一个很好的妥协方案。你可以替换此导入...

import android.content.DialogInterface.OnClickListener;

通过这个导入...

import android.content.DialogInterface;

那么当你需要引用特定的接口时,你可以这样做...

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

之所以这样做是因为DialogInterface是一个有一个嵌套的静态接口OnClickListener的接口。这样看起来会好一些,并且解决了名称冲突问题。


0

我认为这是因为一些类(例如AlertDialog)与DialogInterface.OnClickListener一起使用,其中OnClick方法需要两个参数:

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

View.OnClickListener接口的OnClick方法只需要一个参数:

参数
v - 被点击的视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接