美文网首页
设计模式-观察者模式-应用

设计模式-观察者模式-应用

作者: 方_f666 | 来源:发表于2019-09-25 17:06 被阅读0次

点击事件源码分析:

        //为控件设置回调函数,在这里定义具体的回调方法
        findViewById(R.id.text).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

大家一定使用过这样普通的点击事件,我们来用“观察者-回调函数”思想分析下源码:
首先点入OnClickListener看一下源码,这是一个写在View类中的回调接口OnClickListener,接口中有一个onClick()方法。

    //声明回调接口
    public interface OnClickListener {
        void onClick(View v);
    }

然后点击setOnClickListener,进入到View类中查看:

    public void setOnClickListener(@Nullable OnClickListener l) {
        if (!isClickable()) {
            setClickable(true);
        }
        //设置回调接口对象的成员变量
        getListenerInfo().mOnClickListener = l;
    }

然后在View类中搜索onClick方法会调用到performClick():

    public boolean performClick() {
        final boolean result;
        final ListenerInfo li = mListenerInfo;
        if (li != null && li.mOnClickListener != null) {
            playSoundEffect(SoundEffectConstants.CLICK);
            //调用回调接口对象中的方法
            li.mOnClickListener.onClick(this);
            result = true;
        } else {
            result = false;
        }
        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
        notifyEnterOrExitForAutoFillIfNeeded(true);
        return result;
    }

在View类中performClick()方法是被onTouchEvent()方法所调用:

    public boolean onTouchEvent(MotionEvent event) {
        if (mPerformClick == null) {
            mPerformClick = new PerformClick();
        }
        if (!post(mPerformClick)) {
            performClick();
        }
    }

1.当用户触摸按钮时,根据正常的事件分发机制,是最上层的View进行响应,调用最上层view的onTouchEvent()消化这个点击触摸事件。
2.同时onTouchEvent()会调用performClick(),然而在performClick()中调用了回调接口对象的onClick()方法
3.在其他类中调用view的setOnClickListener(),并且定义具体的回调方法。
总结,在用户触摸按钮时,可以响应到具体回调方法中的代码。以上是使用“观察者-回调函数”思想分析点击事件的源码。

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • JS设计模式之观测者模式

    如果, 你只能学习一种设计模式,那么这种模式就只能是观察者模式。观察者模式的应用范围很广, 可能你在无意中就遇到过...

  • 设计模式详解——观察者模式

    本篇文章介绍一种设计模式——观察者模式。观察者模式在Android中有着很多的应用,如按钮监听,接口回调以及很多流...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

网友评论

      本文标题:设计模式-观察者模式-应用

      本文链接:https://www.haomeiwen.com/subject/ddoiuctx.html