Android的setOnCLickListener()如何工作?

Ilj*_* KO 0 java android

我想知道Android OnClik Listener是如何工作的?它是什么模式的?观察?

我无法想象如何在我的应用程序中实现它!它需要是一个自定义实现,因为我想用我的对象而不是视图.

那么如何实现调用obj.setOnClickListener(new Class(){});

在我的代码?

我的意思是,我可以在我的基类中使用一个方法,派生类实现了这个方法,然后只需要一个静态的ArrayList.但是如何在运行时向此List添加新类?

这个类OnClickListener(){}的定义很奇怪.

如何定义现有类并覆盖方法?

我的Java从来没有做过这么好......

编辑:这个问题不是关于如何使用ONCLICKLISTENER.我知道如何使用...

我想要的是:

我想要一个Super Class,它有一个像这样的方法的实现:

public void setMyOnclickListener(MyOnClickListener myListener)
{
    //magic code
}
Run Code Online (Sandbox Code Playgroud)

现在我希望有一个这个类的对象让我们调用它

Subclass obj;
Run Code Online (Sandbox Code Playgroud)

现在我想这样做:

obj.setMyOnClickLister(new MyOnClickListener()
    {
        //defined method at runtime
        public void aDefinedMethod()
        {
            //here goes in some code
        }
    });
Run Code Online (Sandbox Code Playgroud)

我怎么能有一个类作为参数只有作为匿名类存在的方法?

EDIT2:

好吧我知道它OnClickListener只是一个接口-.-不是一个类定义那是我的困惑!

Ser*_*kov 5

每个View都包含ListenerInfo静态类,它OnClickListener实际上也包含回调.

这个怎么运作?

系统始终保留屏幕上的所有视图.当用户点击屏幕时,我们有一个递归的foreach循环:

switch(event) {
    ...
    case ON_CLICK:
    process(ViewRoot);
}

void process(View view) {

    for(View view : view.getChilds()) {
        if(view instanceOf ViewGroup && ((ViewGroup)view).getChildCount() > 0) {
             process(view);
        }
        if(view.getListenerInfo().mOnClickListener != null)
             view.getListenerInfo().mOnClickListener.onClick(view)
    }
}
Run Code Online (Sandbox Code Playgroud)

当你打电话时,setOnClickListener你实际上说"嘿Android!在这里它回调.当用户点击时,请使用它."

View.class还有getListenerInfo返回ListenerInfo对象的方法.

系统使用此方法来调度事件.

所以Observer这里没有模式.它只是简单检查现有的回调.