简体   繁体   English

将多个侦听器附加到 android 中的视图?

[英]Attaching multiple listeners to views in android?

Is it possible to attach multiple onClick listeners to buttons in android?是否可以将多个 onClick 侦听器附加到 android 中的按钮? Example:例子:

btn1.setOnClickListener(listener1);
btn1.setOnCliclListener(listener2);

And when the button is clicked onClick event of both listener1 and listener2 are triggered?当点击按钮时, listener1listener2的 onClick 事件都被触发了吗?

In normal GUI applications I know that we can attach more than one event handler for an event.在普通的 GUI 应用程序中,我知道我们可以为一个事件附加多个事件处理程序。 Is it possible for android too or is there any restrictions? android 也可以吗?或者有什么限制吗?

Regards, Lalith问候, 拉利斯

Android only supports one registered listener in general. Android 一般只支持一个注册的监听器。 However, you can easily create a listener that simply forwards the events to other listeners using the composite pattern.但是,您可以轻松创建一个侦听器,该侦听器使用复合模式将事件简单地转发给其他侦听器。

Should someone bump into a similar problem, try this out:如果有人遇到类似的问题,试试这个:

private void setClickListeners(View view, List<View.OnClickListener> clickListeners){
    view.setOnClickListener(v -> {
        for(View.OnClickListener listener: clickListeners){
            listener.onClick(v);
        }
    });
}

An easy way to achieve this would be simply do:实现这一目标的一种简单方法是:

btn1.setOnClickListener(new View.OnClickListener(){
 @Override
 public void onClick(View v) {  
   listener1.onClick(v);
   listener2.onClick(v);
}})

Or call listener2.onClick(v) inside the definition of your listener1或者在 listener1 的定义中调用 listener2.onClick(v)

This is what I'll do in Kotlin:这就是我将在 Kotlin 中执行的操作:

arrayListOf(
        view1,
        view2,
        view3
    ).forEach { it.setOnClickListener { /*do stuff here*/ } }

very readable, and copy-paste error safe.非常易读,并且复制粘贴错误安全。

public void onClick(View v) {
    if(v.getId() == R.id.button1) {
        // do this
    }else if(v.getId() == R.id.button2) {
        // do that
    }
}

Nope, for example just do this :不,例如只是这样做:

Set Listener:设置监听器:

btn.setOnClickListener(this);

Implement Method:实施方法:

public void Onclick(View arg0){

   // check your id and do what you want
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM