android-多onClick监听器在一个按钮

ctc*_*631 16 android onclick listener

我创建了一个像Mybutton.java这样的自定义组件,我在Mybutton.java中设置了一个onclick监听器.

现在,在我的新活动中,我必须调用Mybutton并在onclick监听器中添加内容.

但是,如果我使用 OnClickListener mClickListener = new OnClickListener(){...... 它将替换旧内容.我希望它可以一起做新旧听众.

我搜索了一些信息,发现我可以实现这个方法.经过多次尝试,我仍然遇到错误.

谁能给我一个简单的例子,我可以学习修改它?

Dee*_*eeV 35

我认为Android API中没有允许多个onClick侦听器的API .您需要一些自定义类来处理单个onClick()并传入处理程序以供其调用.像这样的东西:

private class CompositeOnClickListener implements View.OnClickListener{
    List<View.OnClickListener> listeners;

    public CompositeOnClickListener(){
        listeners = new ArrayList<View.OnClickListener>();
    }

    public void addOnClickListener(View.OnClickListener listener){
        listeners.add(listener);
    }

    @Override
    public void onClick(View v){
       for(View.OnClickListener listener : listeners){
          listener.onClick(v);
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

设置按钮时,请执行以下操作:

CompositeOnClickListener groupListener = new CompositeOnClickListener();
myButton.setOnClickListener(groupListener);
Run Code Online (Sandbox Code Playgroud)

然后,只要您想添加另一个侦听器,只需调用即可

groupListener.addOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v){
      **** Custom implementation ****
   }
});
Run Code Online (Sandbox Code Playgroud)


Arn*_*rty 5

您可以Button像这样创建自定义类:

    public class MyButton extends Button {

    private CustomOnClickListener mCustomOnClickListener;

    public interface CustomOnClickListener {
        void onClick(View v);
    }


    public MyButton(Context context) {
        super(context);

        // Set your own onClickListener
        View.OnClickListener ocl = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do whatever you want to do

                // Invoke the other added onclick listener
                if(mCustomOnClickListener != null) {
                    mCustomOnClickListener.onClick(v);
                }
            }
        };
        setOnClickListener(ocl);
    }

    // use this function to set the other onclick listener
    public void setCustomOnClickListener(CustomOnClickListener cl) {
        mCustomOnClickListener = cl;
    }

    }
Run Code Online (Sandbox Code Playgroud)

并且,像这样使用它:

    // create your button
    MyButton button = new MyButton(context);
    // add your custom onClickListener
    button.setCustomOnClickListener(new MyButton.CustomOnClickListener() {
        @Override
        public void onClick(View v) {
            // Do whatever you intend to do after the actual onClickListener
            // from MyButton class has been invoked.
        }
    });
Run Code Online (Sandbox Code Playgroud)