我想知道 Android OnClik Listener 是如何工作的?它是什么模式?观察者?
我无法想象如何在我的应用程序中实现它!它需要是一个自定义实现,因为我想用我的对象而不是 View 来完成它。
那么如何实现调用 obj.setOnClickListener(new Class(){});
在我的代码中?
我的意思是,好吧,我可以在我的基类中拥有一个派生类实现的方法,然后只拥有一个静态 ArrayList 左右。但是如何在运行时将新类添加到此列表中?
这个类 OnClickListener(){} 的定义很奇怪。
如何定义现有类并重写方法?
我的Java不太好,从来没有做过这个...
编辑:这个问题不是关于如何使用 ONCLICKLISTENER。我知道如何使用它...
我想要什么:
我想要一个具有如下方法实现的 super 类:
public void setMyOnclickListener(MyOnClickListener myListener)
{
//magic code
}
现在我想要一个此类的对象,我们称之为它
Subclass obj;
现在我想这样做:
obj.setMyOnClickLister(new MyOnClickListener()
{
//defined method at runtime
public void aDefinedMethod()
{
//here goes in some code
}
});
如何才能有一个以类作为参数且仅作为匿名类存在的方法?
编辑2:
好的,我明白了 OnClickListener 只是一个接口(interface) -.- 不是类定义 这就是我的困惑!!!
最佳答案
每个 View 都包含 ListenerInfo
静态类,该类保存回调,OnClickListener
实际上也是如此。
它是如何工作的?
系统始终保留屏幕上的所有 View 。 当用户点击屏幕时,我们有一个递归 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)
}
}
当您调用 setOnClickListener
时,您实际上会说“嘿 Android!这里是回调。当用户点击时,请使用它。”
View.class 还具有返回 ListenerInfo
对象的 getListenerInfo
方法。
系统使用此方法来调度事件。
所以这里没有Observer
模式。它只是简单地检查现有回调。
关于java - Android 的 setOnCLickListener() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32884665/