詳解Android中接口回調(diào)、方法回調(diào)
在Android開發(fā)中我們很多地方都用到了方法的回調(diào),回調(diào)就是把方法的定義和功能導(dǎo)入實(shí)現(xiàn)分開的一種機(jī)制,目的是為了解耦他的本質(zhì)是基于觀察者設(shè)計(jì)模式,即觀察者設(shè)計(jì)模式的的簡化版,例如:在下載時(shí)候的進(jìn)度回調(diào),在adapter與activity之間的回調(diào),在javabean和fragment以及fragment之間的回調(diào)等等,回調(diào)的目的主要有兩個(gè):其一是傳遞數(shù)據(jù),其二是保持?jǐn)?shù)據(jù)的同步更新。常用的有兩種形式,一是使用內(nèi)部類的形式,得到接口的子類對象,另一種是直接實(shí)現(xiàn)定義的接口。
一、內(nèi)部類的形式
1、在需要傳遞數(shù)據(jù)的一端定義一個(gè)接口,接口里面些需要監(jiān)聽的方法以及參數(shù)。
2、定義一個(gè)的接口類型的變量存儲(chǔ)數(shù)據(jù)。
3、創(chuàng)建一個(gè)公共的方法,讓外部調(diào)用,并且傳遞接口類型的參數(shù),給其定義的接口類型的數(shù)據(jù)初始化。
/**
* 定義一個(gè)接口
*/
public interface onListener{
void OnListener(String code,String msg);
}
/**
*定義一個(gè)變量儲(chǔ)存數(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ù)進(jìn)行處理
}
});
二、實(shí)現(xiàn)接口的形式
1、定義一個(gè)接口,可以另起包名,或者定義在類里面。
/**
* 定義一個(gè)接口
*/
public interface onListener{
void OnListener(String code,String msg);
}
2、在需要傳遞數(shù)據(jù)的一端的構(gòu)造方法對接口進(jìn)行初始化。
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方法對其進(jìn)行初始化,強(qiáng)制類型轉(zhuǎn)換后獲取接口對象。此時(shí)在構(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里面進(jìn)行獲取當(dāng)前fragment所在的activity,調(diào)用getActivity進(jìn)行強(qiáng)轉(zhuǎn)或者直接傳遞會(huì)報(bào)錯(cuò)。報(bào)的錯(cuò)誤為類型轉(zhuǎn)換錯(cuò)誤。
5、讓activity實(shí)現(xiàn)此接口,重寫其抽象方法,在抽象法里面處理任務(wù)。
@Override
public void OnListener(String rtncode, String rtnmsg) {
//在這里獲取數(shù)據(jù)進(jìn)行處理
}
以上兩個(gè)回調(diào)方法適用于兩個(gè)類之間的數(shù)據(jù)傳遞,現(xiàn)在來看看三個(gè)類之間的數(shù)據(jù)傳遞,javabean——>activity——>fragment之間的數(shù)據(jù)傳遞。需求:在javabean中獲取數(shù)據(jù),當(dāng)點(diǎn)擊fragment按鈕時(shí)候,要求顯示獲取的數(shù)據(jù)進(jìn)行相關(guān)業(yè)務(wù)處理。步驟如下:
1、新建一個(gè)包,定義一個(gè)接口,定義相關(guān)方法。
2、在javabean的構(gòu)造方法中對接口進(jìn)行初始化,并在適當(dāng)?shù)奈恢谜{(diào)用一下接口中的方法。
3、在fragment中重寫onAttach,對接口進(jìn)行初始化,強(qiáng)轉(zhuǎn)為接口類型。
4、創(chuàng)建對象,傳遞參數(shù)為3中強(qiáng)轉(zhuǎn)的接口類型。
5、讓acitivity實(shí)現(xiàn)接口,重寫抽象方法,在方法中進(jìn)行數(shù)據(jù)的處理。
具體代碼就省略了……
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- 詳細(xì)介紹Android中回調(diào)函數(shù)機(jī)制
- Android中回調(diào)接口的使用介紹
- Android的Fragment的生命周期各狀態(tài)和回調(diào)函數(shù)使用
- 理解Android中Activity的方法回調(diào)
- android自定義控件和自定義回調(diào)函數(shù)步驟示例
- 深入淺析Android接口回調(diào)機(jī)制
- Android觀察者模式實(shí)例分析
- android開發(fā)中使用java觀察者模式
- Android源碼學(xué)習(xí)之觀察者模式應(yīng)用及優(yōu)點(diǎn)介紹
- Android回調(diào)與觀察者模式的實(shí)現(xiàn)原理
相關(guān)文章
Android開發(fā)之Android studio的安裝與使用
本文是此系列文章的第一篇,主要給大家講述的是Android studio的安裝與使用,十分的詳細(xì),有需要的小伙伴可以參考下2016-02-02
Android 利用反射+try catch實(shí)現(xiàn)sdk按需引入依賴庫的方法
這篇文章主要介紹了Android 利用反射+try catch來實(shí)現(xiàn)sdk按需引入依賴庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Android徹底清除APP數(shù)據(jù)的兩種方案總結(jié)
大家在用Android手機(jī)的時(shí)候肯定都遇到過內(nèi)存剩余空間越來越小的情況,所以下面這篇文章主要給大家介紹了關(guān)于Android徹底清除APP數(shù)據(jù)的兩種方案,需要的朋友可以參考下2021-11-11
ViewPager+RadioGroup實(shí)現(xiàn)左右滑動(dòng)卡片布局
這篇文章主要為大家詳細(xì)介紹了ViewPager+RadioGroup實(shí)現(xiàn)左右滑動(dòng)卡片布局,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Android UI設(shè)計(jì)系列之自定義SwitchButton開關(guān)實(shí)現(xiàn)類似IOS中UISwitch的動(dòng)畫效果(2
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義SwitchButton開關(guān)實(shí)現(xiàn)類似IOS中UISwitch的動(dòng)畫效果,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android實(shí)現(xiàn)SwipeRefreshLayout首次進(jìn)入自動(dòng)刷新
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)SwipeRefreshLayout首次進(jìn)入自動(dòng)刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01

