江门门窗陈同学 發表於 2019-7-4 20:55:00

Android开发——回调(Callback)

<svg xmlns="http://www.w3.org/2000/svg" style="display: none">
                        <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0)"></path>
                  </svg>
                                          <div class="htmledit_views" id="content_views">
<div></div>
<div><h4>1. 回调函数的定义:</h4></div>
<div>在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用。</div>
<div><h4> 类比:</h4></div>
<div>你(B类)去书店买书,结果发现想买的书卖完了,这时候书店(A类)告诉你他们有来书通知业务(接口和接口中的抽象方法),于是你留下了自己的手机号让书店有书了给你来电(实现该抽象方法),书店等到有书了以后会根据你留下的电话和方法给你来电提醒你(B类实现的方法由A类来调用)。</div>
<div><h4>2. 使用回调的情况:</h4></div>
<div>
<ul><li>处理异步请求的返回值</li><li>同一个事件有不同的处理方法</li></ul></div>
<div><h4>3. 回调的使用方法:</h4></div>
<div>
<ul><li>定义接口(public interfact),预定义需要完成的函数</li><li>定义A类,使用接口和该接口中的抽象方法,同时在初始化A时请求函数B作为callback的参数</li><li>定义B类(implements interface),设定函数的具体动作,并将B当做参数传给A,使A在回调时可以找到函数的位置</li></ul></div>
<div><h4>4. 具体代码:</h4></div>
<div>
<ul><li><span>定义接口</span></li></ul><span><span></span></span><pre><code class="language-java hljs"></code><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">//定义回调接口</span><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">Callback</span></span>{</div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">notice</span><span class="hljs-params">()</span></span>;<div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div><div class="hljs-button {2}"></div></div></div></div></div></pre>
<ul><li><span>定义A类</span><span></span><pre><code class="language-java hljs"></code><div class="hljs-ln-numbers"><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">A</span></span>{<div class="hljs-ln-code"><div class="hljs-ln-line">        </div></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-keyword">private</span> CallBack callBack;<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">A</span><span class="hljs-params">(CallBack callBack)</span></span>{<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">                <span class="hljs-keyword">this</span>.callBack = callBack;<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">        }</div><div class="hljs-ln-code"><div class="hljs-ln-line">        </div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Operation</span><span class="hljs-params">()</span></span>{<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">                <span class="hljs-keyword">if</span>(callBack != <span class="hljs-keyword">null</span>){<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">                        callBack.notice();<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">                }<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">        }<div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div><div class="hljs-button {2}"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></pre></li><li><span>定义B类</span></li></ul><span></span><pre><code class="language-java hljs"></code><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">B</span> <span class="hljs-title">implement</span> <span class="hljs-title">CallBack</span></span>{</div></div><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String args[])</span> </span>{ </div></div><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">      A a = <span class="hljs-keyword">new</span> A(<span class="hljs-keyword">this</span>);</div></div><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">                a.Operation();</div></div><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">    } <div class="hljs-ln-code"><div class="hljs-ln-line">        </div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-function"><span class="hljs-meta">@Override</span></span></div></div><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">notice</span><span class="hljs-params">()</span></span>{</div></div><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">                System.out.println(<span class="hljs-string">"Now you get notice!"</span>);</div></div><div class="hljs-ln-numbers"></div><div class="hljs-ln-code"><div class="hljs-ln-line">        }</div></div><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></div></div></div></pre><br><br><br></div> </div><br><br>
来源:https://www.cnblogs.com/JasonLGJnote/p/11159861.html
頁: [1]
查看完整版本: Android开发——回调(Callback)