在很久以前刘陶,公司讓實(shí)現(xiàn)一個(gè)功能,就是美團(tuán)中的選券牢撼。之后根據(jù)選擇的券匙隔。返回券對應(yīng)的信息。當(dāng)時(shí)剛?cè)胄醒妫琷ava基礎(chǔ)薄弱纷责,什么接口回調(diào),匿名類都不知道是什么撼短。只知道安卓里面的startActivityForResult再膳。intent傳值。
下面介紹接口回調(diào)曲横。
定義一個(gè)接口為:
public interface YangtestInter {
void addMath(int a);
}//自己建
模擬從
MultiFragment (A頁面)---->VideoPlayer(B頁面)類喂柒。這個(gè)在腦海中腦補(bǔ)吧。一個(gè)是fragment一個(gè)是activity。就是簡單的intent跳轉(zhuǎn)灾杰。
其中VideoPlayer中定義一個(gè)靜態(tài)方法蚊丐,目的是為了在當(dāng)前頁面下,獲取到從上個(gè)頁面?zhèn)鬟f過來的‘接口對象’
private YangtestInter _iYang;
public static void setPresent(YangtestInter t) {
_iYang = t;
}
//用到了activity的生命周期中的方法
@Override
protected void onDestroy() {
super.onDestroy();
_iYang.addMath(10);//當(dāng)此頁面銷毀時(shí)吭露,調(diào)用此接口
stopPlay();//結(jié)束了必須停止下來吠撮,否則會發(fā)生錯(cuò)誤。造成控件信息被強(qiáng)制清空讲竿,但是倒計(jì)時(shí)缺還在引用的問題
}
fragment頁面為
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initData();//初始化參數(shù)∨牛可忽略不看
//此處就是將此頁面中的接口對象傳入VidoPlayer的靜態(tài)方法题禀。用的是匿名類的方式
VideoPlayer.setPresent(new YangtestInter() {
@Override
public void addMath(int a) {
Toast.makeText(getActivity(), a + "我被回調(diào)了!0蚪荨迈嘹!", Toast.LENGTH_SHORT).show();
}
});
//這個(gè)是點(diǎn)擊事件
_btn.setOnClickListener(v -> {
Intent intent = new Intent(getActivity(), VideoPlayer.class);
startActivity(intent);
});
}
這樣就可以完成,在B頁面銷毀的時(shí)候全庸,A頁面自動彈出一個(gè)Toast秀仲。也就是說獲取到了從B傳遞給A的消息。
回調(diào)成功展示.png
現(xiàn)在流行的MVP模式壶笼,實(shí)質(zhì)也是接口回調(diào)神僵。沒什么區(qū)別的。