Android的簡單應用(三)——為你的程式添加監聽器

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   color   ar   os   java   

平時在寫程式時經常會遇到監聽器,比如按鈕的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();//介面裡面要實現的方法    }    }
    View Code

     

二、調用回呼函數

我這裡是在Activity中綁定介面,實際代碼如下:

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

繼承了CallerClass中的CallBack介面,Out方法如下:

    @Override    public void Out() {        // TODO Auto-generated method stub        System.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;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        caller = new CallerClass();        caller.setCallBack(this);        caller.Out();            }    @Override    public void Out() {        // TODO Auto-generated method stub        System.out.println("這是Activity上的輸出");    }}

 

 

 

三、結果

Perfect~

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

Android的簡單應用(三)——為你的程式添加監聽器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.