編輯:關於Android編程
在Android開發中我們很多地方都用到了方法的回調,回調就是把方法的定義和功能導入實現分開的一種機制,目的是為了解耦他的本質是基於觀察者設計模式,即觀察者設計模式的的簡化版,例如:在下載時候的進度回調,在adapter與activity之間的回調,在javabean和fragment以及fragment之間的回調等等,回調的目的主要有兩個:其一是傳遞數據,其二是保持數據的同步更新。常用的有兩種形式,一是使用內部類的形式,得到接口的子類對象,另一種是直接實現定義的接口。
一、內部類的形式
1、在需要傳遞數據的一端定義一個接口,接口裡面些需要監聽的方法以及參數。
2、定義一個的接口類型的變量存儲數據。
3、創建一個公共的方法,讓外部調用,並且傳遞接口類型的參數,給其定義的接口類型的數據初始化。
/** * 定義一個接口 */ public interface onListener{ void OnListener(String code,String msg); } /** *定義一個變量儲存數據 */ private onListener listener; /** *提供公共的方法,並且初始化接口類型的數據 */ public void setListener( onListener listener){ this.listener = listener; }
4、在合適的位置調用接口裡面的方法,傳遞數據。
/** * 在合適的位置給其調用接口,給其賦值 */ if (listener!=null) { listener.OnListener(rtncode,rtnmsg); }
5、在需要獲取數據的地方,創建對象調方法。
Print print = new Print(); print.setListener(new PrintTicket.onListener() { @Override public void OnListener(String code, String msg) { //在這裡獲取數據進行處理 } });
二、實現接口的形式
1、定義一個接口,可以另起包名,或者定義在類裡面。
/** * 定義一個接口 */ public interface onListener{ void OnListener(String code,String msg); }
2、在需要傳遞數據的一端的構造方法對接口進行初始化。
public Print(OnListener listener) { this.listener = listener; }
3、在合適的位置調用接口裡面的方法,傳遞數據。
/** * 在合適的位置給其調用接口,給其賦值 */ if (listener!=null) { listener.OnListener(rtncode,rtnmsg); }
4、在需要獲取數據的地方創建對象傳遞參數。
Print print = new Print(this);
這裡面的this代指的是當前頁面的activity,如果是fragment的話,需要重寫onAttach方法對其進行初始化,強制類型轉換後獲取接口對象。此時在構造方法裡面傳遞接口得數據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裡面進行獲取當前fragment所在的activity,調用getActivity進行強轉或者直接傳遞會報錯。報的錯誤為類型轉換錯誤。
5、讓activity實現此接口,重寫其抽象方法,在抽象法裡面處理任務。
@Override public void OnListener(String rtncode, String rtnmsg) { //在這裡獲取數據進行處理 }
以上兩個回調方法適用於兩個類之間的數據傳遞,現在來看看三個類之間的數據傳遞,javabean——>activity——>fragment之間的數據傳遞。需求:在javabean中獲取數據,當點擊fragment按鈕時候,要求顯示獲取的數據進行相關業務處理。步驟如下:
1、新建一個包,定義一個接口,定義相關方法。
2、在javabean的構造方法中對接口進行初始化,並在適當的位置調用一下接口中的方法。
3、在fragment中重寫onAttach,對接口進行初始化,強轉為接口類型。
4、創建對象,傳遞參數為3中強轉的接口類型。
5、讓acitivity實現接口,重寫抽象方法,在方法中進行數據的處理。
具體代碼就省略了……
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持本站!
相關閱讀:Android開發之開發者頭條(一)啟動頁實現Android開發之開發者頭條(二)實現左滑菜單title: 帶你實現開發者頭條APP(三) 首頁實現tags:
在上一篇教程中,主要介紹了如何把OSG源代碼編譯成為能夠在Android項目下使用的函數庫。在這一篇教程中,我將針對如何在自己的Android項目中配置OSG函數庫進行詳
用手機淘寶浏覽商品詳情時,商品圖片是放在後面的,在第一個ScrollView滾動到最底下時會有提示,繼續拖動才能浏覽圖片。仿照這個效果寫一個出來並不難,只要定義一個Lay
1:服務端使用PHP 復制代碼 代碼如下:<?php echo date(Y-m-d H:i:s);?>2:activit
compile 'com.android.suppo