【问题标题】:Attaching multiple listeners to views in android?将多个侦听器附加到android中的视图?
【发布时间】:2010-12-27 23:33:53
【问题描述】:

是否可以将多个 onClick 侦听器附加到 android 中的按钮? 示例:

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

当点击按钮时,listener1listener2的onClick事件都会触发?

在普通的 GUI 应用程序中,我知道我们可以为一个事件附加多个事件处理程序。 android也可以吗?有什么限制吗?

问候, 拉利斯

【问题讨论】:

    标签: android events onclicklistener


    【解决方案1】:

    Android 一般只支持一个注册的监听器。但是,您可以轻松地创建一个侦听器,该侦听器只需使用复合模式将事件转发给其他侦听器。

    【讨论】:

    • 能否请您告诉我这方面的任何参考资料?
    • @Lalith:复合模式是经典的设计模式:en.wikipedia.org/wiki/Composite_pattern
    • Hmm.. 我需要多个事件处理程序来处理单个事件的主要原因是我计划创建一个库,供其他 Android 开发人员使用。它应该在某个地方初始化,并且它自己将所需的事件处理程序附加到每个 View 项。我在 Silverlight 中轻松做到了这一点,所以想知道 htat 是否可行。
    • @Lalith:是的,有可能。
    • 有关如何执行此操作的示例:stackoverflow.com/questions/5465204/…
    【解决方案2】:

    如果有人遇到类似的问题,试试这个:

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

    【讨论】:

      【解决方案3】:

      实现这一目标的简单方法是:

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

      或者在你的 listener1 的定义中调用 listener2.onClick(v)

      【讨论】:

        【解决方案4】:
        public void onClick(View v) {
            if(v.getId() == R.id.button1) {
                // do this
            }else if(v.getId() == R.id.button2) {
                // do that
            }
        }
        

        【讨论】:

        • OP 的问题是一个按钮的两个听众
        【解决方案5】:

        不,例如,只需这样做:

        设置监听器:

        btn.setOnClickListener(this);
        

        实现方法:

        public void Onclick(View arg0){
        
           // check your id and do what you want
        }
        

        【讨论】:

          猜你喜欢
          • 2020-08-02
          • 1970-01-01
          • 1970-01-01
          • 2011-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-21
          相关资源
          最近更新 更多