Android关于callback的一些总结

关于callback的一些总结

刚开始接触回调的时候感觉,我擦,这么难搞的东西,我应该怎么下手呢?

记得那是我第一次接触项目,是一个商城类app,主管叫我完善购物车相关功能,主要是给添加到购物车里面的商铺增加编辑功能。说白了就是能加减当前选中商品的数量。

那时候应该是我刚学习完android找的第一家公司,入职前一周一直在看之前的代码,然后就接了这么个任务,当时网上各种搜。

好了,不扯蛋了,回到正题。我对callback的理解很简单:
就是A要实时得到B内部的一些状态的改变

额、、、是不是很难理解,我们还是用我当时的那个例子来说吧。

很简单的一个listview(商品列表),每个item有2个按钮,加,减。
那么你就要监听这2个按钮了,并且要根据库存等一系列因素来判断是否可以添加:
比如一双袜子,仓库就剩2双了,用户已经选了2双,再点加,如果我还让他加的话,到时候没货了这个锅岂不是要我来背?本来就选了一双,点减了我不能给人家显示个0吧?
额、又扯到蛋了,不考虑这些因素,我们来说一下callback

此时你会发现,并没有什么api能让你监听item内部的按钮的api,说一说我当时想到的解决办法,首先是想在adapter内部对按钮设置监听,但是碰到个问题,修改商品后你还有重新计算总价吧,要修改当前购物车订单数据吧,这些如果都放在adapter中的话,太麻烦了也太low了,那么试试高大上的方法吧,callback,也就是回调

购物车界面就是一个listview(请不要问我为什么不用recyclerView,当时5.0还没出来)
每一个item的布局为了简化,我们姑且就认为只有4个元素吧
1、商品名
2、当前添加数量
3、button加
4、button减

第一步,定义一个内部接口

adapter中其他的不说,要实现回调的话就需要定义一个内部接口
我们叫他ItemButtonClickListener(高大上吧?有没有联想到经常使用的button的onClcikListener?其实是一样的道理)

interface ItemButtonClickListener{
        abstract void onPlusClick(int position);
        abstract void onReduceClick(int position);
    }

然后呢,给adapter添加一个成员变量,也就是上面这个接口的实例,以便于稍后我们用他内部的2个方法

private ItemButtonClickListener listener;


public MyAdapter(ItemButtonClickListener listener) {
    super();
    this.listener = listener;
}

第二部,给按钮添加监听时间,调用内部接口中对应的方法

btnPlus.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onPlusClick(position);
            }
        });
btnPlus.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        listener.onReduceClick(position);
    }
});

第三步,在activity中实现该接口,并重写接口中的方法

@Override
    public void onPlusClick(int position) {
        //position是用户点击的商品的position
        //修改该商品数量count,然后notifyDataSetChanged就可以啦
    }

@Override
public void onReduceClick(int position) {
    //恩恩,同上
}

总结

有没有感觉很简单?A获取B的状态的改变。
总结一下,
1、定义一个接口
2、声明这个接口为B的成员变量
3、在B的相关业务逻辑中调用接口中的方法
4、A实现这个接口,并实现接口中的抽象方法
5、A中创建B的实例的时候把自己作为参数传过去(作为接口的实现类)
6、那么B中调用该接口的方法时,实际调用的就是A中实现的方法
7、从而实现了回调
8、简单吧
9、waakka

最后,以上都是为加深自己印象写的,如果您不幸点进来了,那么先不好意思了,浪费您的时间了,90度板正鞠躬!如果也跟我一样是小白的话,希望看过后能对你有帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值