gpt4 book ai didi

java - Android 的 setOnCLickListener() 是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 04:20:04 25 4
gpt4 key购买 nike

我想知道 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com