View绑定式监听器实现原理

Posted Arcturis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了View绑定式监听器实现原理相关的知识,希望对你有一定的参考价值。

在我们开发android的时候,会经常重写自定义的View去满足一些需求

然后有时候view会提供一些回调,比如view某个部分被点击了,我们需要通知使用者然后再通过接口传一些参数过去。

对于我之前的做法是使用者就是某个用它的类去实现 implements 这个接口,然后当view被点击的时候就会传数据给这个接口

但是如果某个类使用了这个view你就得implements一个接口,然后如果需要继承的接口过多的话这个类实现的接口会变得很难管理

就比如前一篇文章写的仿网易云音乐的例子来说吧

我们给她绑定一个监听器

这个是那个回调(也就是那个需要绑定的监听器),Dialog里包含一个listview ,绑定监听器之后将list的item位置传给使用者(就是调用的地方)

public interface DialogListClickCallBack {
    void itemClick(int position);
}

我的Dialog内部怎么实现呢?

  private DialogListClickCallBack mListener;   //声明这个监听回调

  //加入set监听器函数 ,将监听器与自身的回调绑定   
  public void setOnclickListener(DialogListClickCallBack l){
        mListener = l;
    }

    使用的位置,调用监听接口的接口内方法,并将位置参数传出
   mListener.itemClick(position);

然后再使用的地方直接使用就可以了

myDialog.setOnclickListener(new DialogListClickCallBack() {
                    @Override
                    public void itemClick(int position) {
                        System.out.println("!!!position = "+position);

                    }
                });

完成!

以上是关于View绑定式监听器实现原理的主要内容,如果未能解决你的问题,请参考以下文章

gojs插件干货:重要概念介绍,数据绑定式,以及怎样去除自带水印方法

android 四大组件值Service 绑定式服务

Vue双向绑定的实现原理系列:监听器Observer和订阅者Watcher

Android 09 服务 使用服务进行本地进程通信

Android官方文档之Bound Services

python thread快速调用