国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

詳解Android中接口回調(diào)、方法回調(diào)

2019-12-12 04:04:11
字體:
供稿:網(wǎng)友

在Android開發(fā)中我們很多地方都用到了方法的回調(diào),回調(diào)就是把方法的定義和功能導(dǎo)入實現(xiàn)分開的一種機制,目的是為了解耦他的本質(zhì)是基于觀察者設(shè)計模式,即觀察者設(shè)計模式的的簡化版,例如:在下載時候的進度回調(diào),在adapter與activity之間的回調(diào),在javabean和fragment以及fragment之間的回調(diào)等等,回調(diào)的目的主要有兩個:其一是傳遞數(shù)據(jù),其二是保持數(shù)據(jù)的同步更新。常用的有兩種形式,一是使用內(nèi)部類的形式,得到接口的子類對象,另一種是直接實現(xiàn)定義的接口。

一、內(nèi)部類的形式

1、在需要傳遞數(shù)據(jù)的一端定義一個接口,接口里面些需要監(jiān)聽的方法以及參數(shù)。

2、定義一個的接口類型的變量存儲數(shù)據(jù)。

3、創(chuàng)建一個公共的方法,讓外部調(diào)用,并且傳遞接口類型的參數(shù),給其定義的接口類型的數(shù)據(jù)初始化。

/**  * 定義一個接口  */ public interface  onListener{   void OnListener(String code,String msg); } /**  *定義一個變量儲存數(shù)據(jù)  */ private onListener listener;  /**  *提供公共的方法,并且初始化接口類型的數(shù)據(jù)  */ public void setListener( onListener listener){   this.listener = listener; } 

4、在合適的位置調(diào)用接口里面的方法,傳遞數(shù)據(jù)。

/**  * 在合適的位置給其調(diào)用接口,給其賦值  */ if (listener!=null) {   listener.OnListener(rtncode,rtnmsg); } 

5、在需要獲取數(shù)據(jù)的地方,創(chuàng)建對象調(diào)方法。

Print print = new Print(); print.setListener(new PrintTicket.onListener() {   @Override   public void OnListener(String code, String msg) {     //在這里獲取數(shù)據(jù)進行處理   } }); 

二、實現(xiàn)接口的形式

1、定義一個接口,可以另起包名,或者定義在類里面。

/**  * 定義一個接口  */ public interface  onListener{   void OnListener(String code,String msg); } 

2、在需要傳遞數(shù)據(jù)的一端的構(gòu)造方法對接口進行初始化。

public Print(OnListener listener) {   this.listener = listener; } 

3、在合適的位置調(diào)用接口里面的方法,傳遞數(shù)據(jù)。

/**  * 在合適的位置給其調(diào)用接口,給其賦值  */ if (listener!=null) {   listener.OnListener(rtncode,rtnmsg); } 

4、在需要獲取數(shù)據(jù)的地方創(chuàng)建對象傳遞參數(shù)。

Print print = new Print(this); 

這里面的this代指的是當(dāng)前頁面的activity,如果是fragment的話,需要重寫onAttach方法對其進行初始化,強制類型轉(zhuǎn)換后獲取接口對象。此時在構(gòu)造方法里面?zhèn)鬟f接口得數(shù)據(jù)listener,如下二選一。

@Override public void onAttach(Activity activity) {   super.onAttach(activity);   OnListener listener = (OnListener) activity; } @Override public void onAttach(Context context) {   OnListener listener = (OnListener) activity; } 

注意:直接在fragment里面進行獲取當(dāng)前fragment所在的activity,調(diào)用getActivity進行強轉(zhuǎn)或者直接傳遞會報錯。報的錯誤為類型轉(zhuǎn)換錯誤。

5、讓activity實現(xiàn)此接口,重寫其抽象方法,在抽象法里面處理任務(wù)。

@Override public void OnListener(String rtncode, String rtnmsg) {   //在這里獲取數(shù)據(jù)進行處理 } 

以上兩個回調(diào)方法適用于兩個類之間的數(shù)據(jù)傳遞,現(xiàn)在來看看三個類之間的數(shù)據(jù)傳遞,javabean――>activity――>fragment之間的數(shù)據(jù)傳遞。需求:在javabean中獲取數(shù)據(jù),當(dāng)點擊fragment按鈕時候,要求顯示獲取的數(shù)據(jù)進行相關(guān)業(yè)務(wù)處理。步驟如下:

1、新建一個包,定義一個接口,定義相關(guān)方法。

2、在javabean的構(gòu)造方法中對接口進行初始化,并在適當(dāng)?shù)奈恢谜{(diào)用一下接口中的方法。

3、在fragment中重寫onAttach,對接口進行初始化,強轉(zhuǎn)為接口類型。

4、創(chuàng)建對象,傳遞參數(shù)為3中強轉(zhuǎn)的接口類型。

5、讓acitivity實現(xiàn)接口,重寫抽象方法,在方法中進行數(shù)據(jù)的處理。

具體代碼就省略了……

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持武林網(wǎng)!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 博罗县| 教育| 庆云县| 邹城市| 饶河县| 六安市| 黔西县| 阿拉善左旗| 临沧市| 永定县| 尉犁县| 泊头市| 孙吴县| 合阳县| 专栏| 镇安县| 峨边| 合水县| 蓝田县| 嘉峪关市| 白沙| 米易县| 凌海市| 叶城县| 河池市| 武川县| 宜昌市| 顺平县| 岳阳县| 花莲市| 峨边| 弥渡县| 沙田区| 冀州市| 介休市| 鄂州市| 申扎县| 商洛市| 肇州县| 吉安市| 揭阳市|