為你的程序添加監聽器

平時在寫程序時經常會遇到監聽器,比如按鈕的click監聽器,按鍵監聽器等等。而android中的監聽器和java中的回調函數是同一個概念,都是在底層代碼中定義一個接口來調用高層的代碼。那么什么是回調函數呢?網上說的是“在WINDOWS中,程序員想讓系統DLL調用自己編寫的一個方法,于是利用DLL當中回調函數(CALLBACK)的接口來編寫程序,使它調用,這個就稱為回調。在調用接口時,需要嚴格的按照定義的參數和方法調用,并且需要處理函數的異步,否則會導致程序的崩潰。這樣的解釋似乎還是比較難懂,這里舉個簡單的例子,程序員A寫了一段程序(程序a),其中預留有回調函數接口,并封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,于是,他通過a中的接口回調自己b中的方法。”按照我的理解就是在程序A中先挖了一個坑,然后等著你在程序B中去填里面的內容。不填?那就是被坑咯~

?

一、定義回調函數

  1. 建立一個類,其中包括一個接口的變量
    private CallBack callBack;//接口的變量
  2. 建立一個接口的聲明
    public interface CallBack{public void Out();//接口里面要實現的方法
    }
  3. 在類中與接口綁定(或者說獲得接口的引用)
    復制代碼
    public void setCallBack(CallBack callBack){this.callBack = callBack;}public void Out(){callBack.Out();System.out.println("這是CallerClass的輸出");}
    復制代碼
  4. 整個類
    復制代碼
    public class CallerClass {private CallBack callBack;//接口的聲明public CallerClass(){};public void setCallBack(CallBack callBack){this.callBack = callBack;}public void Out(){callBack.Out();System.out.println("這是CallerClass的輸出");}public interface CallBack{public void Out();//接口里面要實現的方法}}
    復制代碼

    ?

二、調用回調函數

我這里是在Activity中綁定接口,實際代碼如下:

public class MainActivity extends Activity implements CallerClass.CallBack{  private CallerClass caller; ...}

繼承了CallerClass中的CallBack接口,Out方法如下:

    @Overridepublic void Out() {// TODO Auto-generated method stubSystem.out.println("這是Activity上的輸出");}

?

最后在onCreate中調用CallerClass的Out()方法:

caller = new CallerClass();
caller.setCallBack(this);
caller.Out();

完整代碼:

復制代碼
public class MainActivity extends Activity implements CallerClass.CallBack{private CallerClass caller;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);caller = new CallerClass();caller.setCallBack(this);caller.Out();}@Overridepublic void Out() {// TODO Auto-generated method stubSystem.out.println("這是Activity上的輸出");}}
復制代碼

?

?

?

三、結果

Perfect~

interface的作用感覺和C++中的指針差不多,它是一個地址的引用,但沒有生成內存。所以我們能夠預先為程序賦予要執行的方法。不止如此,interface在設計模式的作用更是強大,工廠模式,建造者模式,觀察者模式無不用到interface。

轉載于:https://www.cnblogs.com/dongweiq/p/4096520.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376509.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376509.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像處理

android圖像處理系列之四--給圖片添加邊框(上) http://www.oschina.net/question/157182_40586 android圖像處理系列之六--給圖片添加邊框(下)-圖片疊加 http://www.osc…

Git push 時每次都需要密碼的疑惑

2015.1.13更新: 在本地搭建Git服務器時,也是有每次操作需要密碼的情況。 是因為每次做推送動作時,Git需要認證你是好人。所以需要密碼。 可以在 /home/username/.ssh/authorized_keys 文件里添加你的 ssh 公鑰。一行一個。這樣就可以在你push…

ruby字符串處理

1. str"abc123"puts str[0].chr > a puts str[0] >a的ascii碼 2.中文字符串的正則表達式 文本編碼:utf-8 文件第一行:#encoding:urf-8 require "iconv" str"八萬"reg/(.)萬/datareg.match(str)result Iconv.i…

PHP+七牛云存儲上傳圖片代碼片段

2014年11月14日 16:37:51 第一段代碼是上傳單個圖片的,第二個是上傳多個圖片的 1 //上傳到七牛2 //單個文件3 //formname: 表單名字; pre: 圖片Url中顯示的圖片名字(也就是七牛中的key)4 public function upImage($formname, $pre)5 {6 if (empty($_FI…

【PS】Gold words tutorials 赤金字教程

material_01material_021. White background and black words.The font of "Laker" is Teenick, and "Huang" is 中國龍粗魏碑2.Open material_01 and select a part of it.Copy and paste the part part into our workspace.You can drag and move to pa…

iOS 鍵盤的關閉

iOS 鍵盤的關閉 //通過委托來放棄 “第一響應者” #pragma mark - UITextField Delegate Method -(BOOL)textFieldShouldReturn:(UITextField*)textField {[textField resignFirstResponder];return YES; } //通過委托來放棄 “第一響應者” #pragma mark - UITextView Delegat…

遞歸與分治

今天總算把第三章遞歸與分治看完了,呵呵,沒想到開頭就給我來了點打擊,看以后不認真學還真不行了! 為了祝賀初戰告捷,把幾個簡單的題目貼上來吧,紀念一下! 《整數因子分解》 大于1的正整數n可以分…

Android中的Handler機制

直接在UI線程中開啟子線程來更新TextView顯示的內容,運行程序我們會發現,如下錯 誤:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.翻譯過來就是&…

初來乍到

從今天開始,我也加入博客園這個大家庭了,希望能和大家一起學習IT技術,共同進步。小弟初來乍到,望大家能多多關照!轉載于:https://www.cnblogs.com/markwave/p/3227777.html

JQuery學習四(過濾選擇器)

&#xff1a;first選擇第一個元素。$&#xff08;“div:first”&#xff09;進行選擇第一個<div> :last 選擇最后一個最后一個元素 $&#xff08;"div:last"&#xff09;選取最后一個<div> [:not(選擇器&#xff09;] 選擇不滿足“選擇器”條件的元素 $…

160 - 1 Acid burn

環境&#xff1a;Windows XP sp3 先打開&#xff0c;看看長什么樣&#xff1a; OD載入&#xff0c;右鍵->查找->所有參考文本字串 找到Sorry,The serial is incorect 找到后就在反匯編窗口跟隨&#xff0c;往上翻&#xff1a; 0042F998 /. 55 push ebp 0…

跟樹有關的數據結構學習系列之概覽

1.Binary Search Tree&#xff08;BST&#xff09; 二叉搜索樹 2.B-Tree 3.BTree 4.B*Tree轉載于:https://www.cnblogs.com/devindong/p/3233041.html

在社會實踐中長本領

暑假回到家&#xff0c;家里要我在自家店里幫忙&#xff0c;做員工。因為我家跟舅舅家合資開了一家家禽凍品批發部&#xff0c;生意興旺&#xff0c;越做越大&#xff0c;忙得不可開交。在自家店里做員工&#xff0c;當然&#xff0c;家里人都很高興&#xff0c;我也樂意。在員…

Animating Layout Changes(展開收起)

原文地址&#xff1a;https://developer.android.com/training/animation/layout.html#add &#xff08;1&#xff09;設置布局文件&#xff1a; <LinearLayout android:id"id/container"android:animateLayoutChanges"true"... /> &#xff08;2&am…

160 - 2 Afkayas.1

環境&#xff1a; Windows Xp sp3 OD載入&#xff1a; 運行&#xff0c;然后輸入&#xff1a; 然后回到OD&#xff0c;按F12來暫停&#xff0c; 然后ALTF9回到程序領空&#xff0c;把彈出的那個錯誤消息框點掉&#xff0c;這時OD來到這里&#xff1a; 004025F9 . 68 E81…

POJ 2125 Destroying The Graph (二分圖最小點權覆蓋集+輸出最小割方案)

題意 有一個圖&#xff0c; 兩種操作&#xff0c;一種是刪除某點的所有出邊&#xff0c;一種是刪除某點的所有入邊&#xff0c;各個點的不同操作分別有一個花費&#xff0c;現在我們想把這個圖的邊都刪除掉&#xff0c;需要的最小花費是多少。 思路 很明顯的二分圖最小點權覆蓋…

160 - 3 Afkayas.2

環境&#xff1a; Windows xp sp3 這次的目標有兩個&#xff1a; 1.去除Nag窗口 2.找出Serial的算法 1.這次去除Nag窗口用了另外兩個程序&#xff1a; &#xff08;1&#xff09;VBLocalize v1.1.0.0 &#xff08;2&#xff09;UltraEdit &#xff08;3&#xff09;VBEx…

class threading.Thread()說明:

class threading.Thread()說明&#xff1a; class threading.Thread(groupNone, targetNone, nameNone, args(), kwargs{}) This constructor should always be called with keyword arguments. Arguments are: group should be None; reserved for future extension when a Th…

并行編程——內存模型之順序一致性

1 定義 Sequential consistency , 簡稱 SC&#xff0c;定義如下 … the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequen…

160 - 4 ajj.1

環境&#xff1a; Windows Xp sp3 輸入Name和Serial&#xff0c;無錯誤提示。看說明&#xff0c;只有正確時才有提示 OD載入&#xff0c;搜索字符串&#xff0c;發現兩個字符串&#xff1a; Panel1DblClick和Panel1Click 一個雙擊一個單擊 先跟隨單擊的&#xff1a; 00457…