【问题标题】:If OnItemClickListener is an interface in Android, how can we create an object based on it?如果 OnItemClickListener 是 Android 中的一个接口,我们如何基于它创建一个对象呢?
【发布时间】:2013-05-17 05:40:09
【问题描述】:

我正在使用来自this site的以下代码:

// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        // Do something in response to the click
    }
};

listView.setOnItemClickListener(mMessageClickedHandler); 

现在它说:

您可以通过实现AdapterView.OnItemClickListener 接口来响应AdapterView 中每个项目的点击事件。

如果OnItemClickListener() 是一个接口,那么我们如何像上面的代码那样创建它的对象?这背后的概念是什么?

【问题讨论】:

  • 你真的应该阅读一点关于 java 编程语言的知识。

标签: android


【解决方案1】:

我不太确定我是否得到您的问题,但在您上面的示例中,mMessageClickedHandler 是对象,并且该对象实现了 OnItemClickListener.onItemClick 方法。如果您来自 C++ 世界,则需要将 OnClickListener 子类等作为单独的实体实现,但在 Java 中,如上所示,您可以创建一个匿名子类(我希望这是正确的名称! ) 在内联代码中。

这不是我个人非常喜欢的技术,但它是如此常见的 Java 习惯用法,我顺其自然!

【讨论】:

    【解决方案2】:

    您不能为接口创建对象。不过,匿名内部类允许您执行以下操作:

    public interface MyInterface {  
    public void myMethod() ; 
    }
    
    MyInterface myIntfObj = new MyInterface() {  
        public void myMethod() {  
    
        }  
    };  
    
    myIntfObj.myMethod();  
    

    【讨论】:

    • 我认为这是一个令人满意的答案.. 因为这里我们正在为接口创建一个内部类(在 java 中是允许的),而这个类是我们作为匿名类创建的,所以基本上它一个定义接口方法的新类..
    • 是的......隐式实现该接口的“内部类”为接口提供抽象定义......:)
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2014-12-23
    • 2020-06-27
    相关资源
    最近更新 更多