日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为你的程序添加监听器

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为你的程序添加监听器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

一、定義回調函數

  • 建立一個類,其中包括一個接口的變量
    private CallBack callBack;//接口的變量
  • 建立一個接口的聲明
    public interface CallBack{public void Out();//接口里面要實現的方法 }
  • 在類中與接口綁定(或者說獲得接口的引用)
    public void setCallBack(CallBack callBack){this.callBack = callBack;}public void Out(){callBack.Out();System.out.println("這是CallerClass的輸出");}
  • 整個類
    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。

    總結

    以上是生活随笔為你收集整理的为你的程序添加监听器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。