在很久以前,公司让实现一个功能,就是美团中的选券。之后根据选择的券。返回券对应的信息。当时刚入行,java基础薄弱,什么接口回调,匿名类都不知道是什么。只知道安卓里面的startActivityForResult。intent传值。
下面介绍接口回调。
定义一个接口为:
public interface YangtestInter {
void addMath(int a);
}//自己建
模拟从
MultiFragment (A页面)---->VideoPlayer(B页面)类。这个在脑海中脑补吧。一个是fragment一个是activity。就是简单的intent跳转。
其中VideoPlayer中定义一个静态方法,目的是为了在当前页面下,获取到从上个页面传递过来的‘接口对象’
private YangtestInter _iYang;
public static void setPresent(YangtestInter t) {
_iYang = t;
}
//用到了activity的生命周期中的方法
@Override
protected void onDestroy() {
super.onDestroy();
_iYang.addMath(10);//当此页面销毁时,调用此接口
stopPlay();//结束了必须停止下来,否则会发生错误。造成控件信息被强制清空,但是倒计时缺还在引用的问题
}
fragment页面为
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initData();//初始化参数。可忽略不看
//此处就是将此页面中的接口对象传入VidoPlayer的静态方法。用的是匿名类的方式
VideoPlayer.setPresent(new YangtestInter() {
@Override
public void addMath(int a) {
Toast.makeText(getActivity(), a + "我被回调了!!!", Toast.LENGTH_SHORT).show();
}
});
//这个是点击事件
_btn.setOnClickListener(v -> {
Intent intent = new Intent(getActivity(), VideoPlayer.class);
startActivity(intent);
});
}
这样就可以完成,在B页面销毁的时候,A页面自动弹出一个Toast。也就是说获取到了从B传递给A的消息。
回调成功展示.png
现在流行的MVP模式,实质也是接口回调。没什么区别的。
网友评论